libxlsxwriter/Makefile in fast_excel-0.4.1 vs libxlsxwriter/Makefile in fast_excel-0.5.0
- old
+ new
@@ -1,81 +1,132 @@
###############################################################################
#
# Makefile for libxlsxwriter library.
#
-# Copyright 2014-2019, John McNamara, jmcnamara@cpan.org
+# Copyright 2014-2022, John McNamara, jmcnamara@cpan.org
#
# Keep the output quiet by default.
Q=@
ifdef V
Q=
endif
-INSTALL_DIR ?= /usr/local
+DESTDIR ?=
+PREFIX ?= /usr/local
PYTEST ?= py.test
+PYTESTFILES ?= test
-.PHONY: docs tags examples
+VERSION = $(shell sed -n -e 's/.*LXW_VERSION \"\(.*\)\"/\1/p' include/xlsxwriter.h)
+SOVERSION = $(shell sed -n -e 's/.*LXW_SOVERSION \"\(.*\)\"/\1/p' include/xlsxwriter.h)
-# Build the libs.
-all :
+.PHONY: docs tags examples third_party
+
+# Build libxlsxwriter.
+all : third_party
+ $(Q)$(MAKE) -C src
+
+# Build the third party libs.
+third_party :
ifndef USE_SYSTEM_MINIZIP
$(Q)$(MAKE) -C third_party/minizip
endif
ifndef USE_STANDARD_TMPFILE
$(Q)$(MAKE) -C third_party/tmpfileplus
endif
- $(Q)$(MAKE) -C src
+ifndef USE_NO_MD5
+ifndef USE_OPENSSL_MD5
+ $(Q)$(MAKE) -C third_party/md5
+endif
+endif
+ifdef USE_DTOA_LIBRARY
+ $(Q)$(MAKE) -C third_party/dtoa
+endif
+# Build a macOS universal binary.
+universal_binary :
+ $(Q)$(MAKE) clean
+ $(Q)TARGET_ARCH="-target x86_64-apple-macos10.12" $(MAKE) all
+ $(Q)mv lib/libxlsxwriter.a libxlsxwriter_x86_64.a
+ $(Q)mv lib/libxlsxwriter.$(SOVERSION).dylib libxlsxwriter_x86_64.dylib
+
+ $(Q)$(MAKE) clean
+ $(Q)TARGET_ARCH="-target arm64-apple-macos11" $(MAKE) all
+ $(Q)mv lib/libxlsxwriter.a lib/libxlsxwriter_arm64.a
+ $(Q)mv lib/libxlsxwriter.$(SOVERSION).dylib lib/libxlsxwriter_arm64.dylib
+ $(Q)mv libxlsxwriter_x86_64.a libxlsxwriter_x86_64.dylib lib
+
+ $(Q)lipo -create -output lib/libxlsxwriter.a lib/libxlsxwriter_x86_64.a lib/libxlsxwriter_arm64.a
+ $(Q)lipo -create -output lib/libxlsxwriter.$(SOVERSION).dylib lib/libxlsxwriter_x86_64.dylib lib/libxlsxwriter_arm64.dylib
+ $(Q)rm -f lib/libxlsxwriter_x86_64.* lib/libxlsxwriter_arm64.*
+
# Build the example programs.
-examples :
+examples : all
$(Q)$(MAKE) -C examples
+# Build the example programs with CPP for compatibility checking.
+examples_cpp : all
+ $(Q)$(MAKE) -C examples CC=$(CXX)
+
# Clean src and test directories.
clean :
$(Q)$(MAKE) clean -C src
- # $(Q)$(MAKE) clean -C test/unit
- # $(Q)$(MAKE) clean -C test/functional/src
- # $(Q)$(MAKE) clean -C examples
+ $(Q)$(MAKE) clean -C test/unit
+ $(Q)$(MAKE) clean -C test/functional/src
+ $(Q)$(MAKE) clean -C test/cpp
+ $(Q)$(MAKE) clean -C examples
$(Q)rm -rf docs/html
$(Q)rm -rf test/functional/__pycache__
$(Q)rm -f test/functional/*.pyc
$(Q)rm -f lib/*
-ifndef USE_STANDARD_TMPFILE
$(Q)$(MAKE) clean -C third_party/minizip
-endif
-ifndef USE_STANDARD_TMPFILE
$(Q)$(MAKE) clean -C third_party/tmpfileplus
-endif
+ $(Q)$(MAKE) clean -C third_party/md5
+ $(Q)$(MAKE) clean -C third_party/dtoa
+# Clean src and lib dir only, as a precursor for static analysis.
+clean_src :
+ $(Q)$(MAKE) clean -C src
+ $(Q)rm -f lib/*
+
# Run the unit tests.
-test : all test_functional test_unit
+test : all test_cpp test_unit test_functional
# Test for C++ const correctness on APIs.
test_const : all
$(Q)$(MAKE) clean -C test/functional/src
$(Q)! $(MAKE) -C test/functional/src CFLAGS=-Wwrite-strings 2>&1 | grep -A 1 "note:"
# Run the functional tests.
test_functional : all
$(Q)$(MAKE) -C test/functional/src
- $(Q)$(PYTEST) test/functional -v
+ $(Q)$(PYTEST) test/functional -v -k $(PYTESTFILES)
# Run all tests.
-test_unit :
- @echo "Compiling unit tests ..."
-ifndef USE_SYSTEM_MINIZIP
- $(Q)$(MAKE) -C third_party/minizip
-endif
-ifndef USE_STANDARD_TMPFILE
- $(Q)$(MAKE) -C third_party/tmpfileplus
-endif
+test_unit : all
$(Q)$(MAKE) -C src test_lib
$(Q)$(MAKE) -C test/unit test
+# Test C++ compilation.
+test_cpp : all
+ $(Q)$(MAKE) -C test/cpp
+
+# Test Cmake. This test should really be done with Cmake in the cmake dir but
+# this is a workaround for now.
+test_cmake :
+ifneq ($(findstring m32,$(CFLAGS)),m32)
+ $(Q)$(MAKE) -C src clean
+ $(Q)cd cmake; cmake .. -DBUILD_TESTS=ON -DBUILD_EXAMPLES=ON; make clean; make; cp libxlsxwriter.a ../src/
+ $(Q)cmake/xlsxwriter_unit
+ $(Q)$(MAKE) -C test/functional/src
+ $(Q)$(PYTEST) test/functional -v -k $(PYTESTFILES)
+else
+ @echo "Skipping Cmake tests on 32 bit target."
+endif
+
# Test the functional test exes with valgrind (in 64bit mode only).
test_valgrind : all
ifndef NO_VALGRIND
$(Q)$(MAKE) -C test/functional/src test_valgrind
$(Q)$(MAKE) -C examples test_valgrind
@@ -95,54 +146,99 @@
# Build the doxygen docs.
doc: docs
docs:
$(Q)$(MAKE) -C docs
+ @echo "Docs built."
-# Simple minded install.
+docs_doxygen_only:
+ $(Q)$(MAKE) -C docs docs_doxygen_only
+
+docs_external:
+ $(Q)make -C ../libxlsxwriter.github.io release
+
+# Simple install.
install: all
- $(Q)mkdir -p $(INSTALL_DIR)/include
- $(Q)cp -R include/* $(INSTALL_DIR)/include
- $(Q)mkdir -p $(INSTALL_DIR)/lib
- $(Q)cp lib/* $(INSTALL_DIR)/lib
+ $(Q)mkdir -p $(DESTDIR)$(PREFIX)/include
+ $(Q)cp -R include/* $(DESTDIR)$(PREFIX)/include
+ $(Q)mkdir -p $(DESTDIR)$(PREFIX)/lib
+ $(Q)cp -R lib/* $(DESTDIR)$(PREFIX)/lib
+ $(Q)mkdir -p $(DESTDIR)$(PREFIX)/lib/pkgconfig
+ $(Q)sed -e 's|@PREFIX@|$(PREFIX)|g' -e 's|@VERSION@|$(VERSION)|g' dev/release/pkg-config.txt > $(DESTDIR)$(PREFIX)/lib/pkgconfig/xlsxwriter.pc
-# Simpler minded uninstall.
+# Simpler uninstall.
uninstall:
- $(Q)rm -rf $(INSTALL_DIR)/include/xlsxwriter*
- $(Q)rm $(INSTALL_DIR)/lib/libxlsxwriter.*
+ $(Q)rm -rf $(DESTDIR)$(PREFIX)/include/xlsxwriter*
+ $(Q)rm $(DESTDIR)$(PREFIX)/lib/libxlsxwriter.*
+ $(Q)rm $(DESTDIR)$(PREFIX)/lib/pkgconfig/xlsxwriter.pc
# Strip the lib files.
strip:
$(Q)strip lib/*
# Run a coverity static analysis.
-coverity:
-ifndef USE_SYSTEM_MINIZIP
- $(Q)$(MAKE) -C third_party/minizip
-endif
-ifndef USE_STANDARD_TMPFILE
- $(Q)$(MAKE) -C third_party/tmpfileplus
-endif
- $(Q)$(MAKE) -C src clean
- $(Q)rm -f lib/*
+coverity: clean_src third_party
$(Q)rm -rf cov-int
$(Q)rm -f libxlsxwriter-coverity.tgz
- $(Q)../../cov-analysis-linux64-8.7.0/bin/cov-build --dir cov-int make -C src libxlsxwriter.a
+ $(Q)../../cov-analysis-linux64-2019.03/bin/cov-build --dir cov-int make -C src libxlsxwriter.a
$(Q)tar -czf libxlsxwriter-coverity.tgz cov-int
$(Q)$(MAKE) -C src clean
$(Q)rm -f lib/*
-# Run a scan-build static analysis.
-scan_build:
-ifndef USE_SYSTEM_MINIZIP
- $(Q)$(MAKE) -C third_party/minizip
+# Run gcov coverage analysis.
+gcov: third_party
+ $(Q)$(MAKE) -C src clean
+ $(Q)$(MAKE) -C src GCOV="--coverage" OPT_LEVEL="-O0"
+ $(Q)$(MAKE) -C src test_lib GCOV="--coverage"
+ $(Q)$(MAKE) -C test/unit test GCOV="--coverage"
+ $(Q)$(MAKE) -C test/functional/src GCOV="--coverage"
+ $(Q)$(PYTEST) test/functional -v -k $(PYTESTFILES)
+ $(Q)mkdir -p build
+ $(Q)gcovr -r src --html-details -o build/libxlsxwriter_gcov.html
+ $(Q)gcovr -r . -f src --sonarqube build/coverage.xml
+
+# Run sonarcloud analysis.
+sonarcloud: gcov
+ifndef SONAR_TOKEN
+ @echo "Please define SONAR_TOKEN to run this analysis."
+ @exit 1
endif
-ifndef USE_STANDARD_TMPFILE
- $(Q)$(MAKE) -C third_party/tmpfileplus
+ $(Q)$(MAKE) clean
+ $(Q)../sonar-scanner-4.6.1.2450-macosx/bin/build-wrapper-macosx-x86 --out-dir build make all
+ $(Q)../sonar-scanner-4.6.1.2450-macosx/bin/sonar-scanner \
+ -Dsonar.organization=jmcnamara-github \
+ -Dsonar.projectKey=jmcnamara_libxlsxwriter \
+ -Dsonar.projectName=libxlsxwriter \
+ -Dsonar.projectVersion=$(VERSION) \
+ -Dsonar.sources=src \
+ -Dsonar.sourceEncoding=UTF-8 \
+ -Dsonar.cfamily.build-wrapper-output=build \
+ -Dsonar.working.directory=build/scannerwork \
+ -Dsonar.host.url=https://sonarcloud.io \
+ -Dsonar.coverageReportPaths=build/coverage.xml
+
+sonarcloud_no_gcov:
+ifndef SONAR_TOKEN
+ @echo "Please define SONAR_TOKEN to run this analysis."
+ @exit 1
endif
- $(Q)$(MAKE) -C src clean
- $(Q)rm -f lib/*
+ $(Q)$(MAKE) clean
+ $(Q)../sonar-scanner-4.6.1.2450-macosx/bin/build-wrapper-macosx-x86 --out-dir build make all
+ $(Q)../sonar-scanner-4.6.1.2450-macosx/bin/sonar-scanner \
+ -Dsonar.organization=jmcnamara-github \
+ -Dsonar.projectKey=jmcnamara_libxlsxwriter \
+ -Dsonar.projectName=libxlsxwriter \
+ -Dsonar.projectVersion=$(VERSION) \
+ -Dsonar.sources=src \
+ -Dsonar.sourceEncoding=UTF-8 \
+ -Dsonar.cfamily.build-wrapper-output=build \
+ -Dsonar.working.directory=build/scannerwork \
+ -Dsonar.host.url=https://sonarcloud.io
+
+
+# Run a scan-build static analysis.
+scan_build: clean_src third_party
$(Q)scan-build make -C src libxlsxwriter.a
$(Q)$(MAKE) -C src clean
$(Q)rm -f lib/*
spellcheck:
@@ -150,18 +246,19 @@
$(Q)for f in include/xlsxwriter/*.h; do aspell --lang=en_US --check $$f; done
$(Q)for f in src/*.c; do aspell --lang=en_US --check $$f; done
$(Q)for f in examples/*.c; do aspell --lang=en_US --check $$f; done
$(Q)aspell --lang=en_US --check Changes.txt
$(Q)aspell --lang=en_US --check Readme.md
+ $(Q)aspell --lang=en_US --check docs/src/examples.txt
releasecheck:
$(Q)dev/release/release_check.sh
release: releasecheck
@echo
- @echo "Pushing to git master ..."
- $(Q)git push origin master
+ @echo "Pushing to git main ..."
+ $(Q)git push origin main
$(Q)git push --tags
@echo
@echo "Pushing updated docs ..."
$(Q)make -C ../libxlsxwriter.github.io release
@@ -170,9 +267,9 @@
@echo "Pushing the cocoapod ..."
$(Q)pod trunk push libxlsxwriter.podspec --use-libraries
@echo
@echo "Finished. Opening files."
- $(Q)open http://libxlsxwriter.github.io/changes.html
- $(Q)open http://cocoadocs.org/docsets/libxlsxwriter
+ $(Q)open https://libxlsxwriter.github.io/changes.html
+ $(Q)open https://cocoadocs.org/docsets/libxlsxwriter
$(Q)open https://github.com/jmcnamara/libxlsxwriter
$(Q)open https://github.com/jmcnamara/libxlsxwriter/releases