| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338 |
- ###############################################################################
- #
- # Copyright 2010 Jonathan Wallace. All rights reserved.
- #
- # Redistribution and use in source and binary forms, with or without
- # modification, are permitted provided that the following conditions are met:
- #
- # 1. Redistributions of source code must retain the above copyright
- # notice, this list of conditions and the following disclaimer.
- #
- # 2. Redistributions in binary form must reproduce the above copyright
- # notice, this list of conditions and the following disclaimer in the
- # documentation and/or other materials provided with the distribution.
- #
- # THIS SOFTWARE IS PROVIDED BY JONATHAN WALLACE ``AS IS'' AND ANY
- # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JONATHAN WALLACE OR
- # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
- # TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- # ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
- # TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
- # THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
- # DAMAGE.
- #
- # The views and conclusions contained in the software and documentation are
- # those of the authors and should not be interpreted as representing official
- # policies, either expressed or implied, of Jonathan Wallace....
- #
- #
- # Author Bernhard Fluehmann
- #
- # [email protected]
- #
- #
- # TARGETS
- # all
- # Builds either a shared or a static library, depending of the value
- # of the SHARED variable.
- # Default: static
- #
- # banner
- # Displays the library version and the target
- #
- # install
- # Installs either the shared of the static library, depending of the value
- # of the SHARED variable. Installs the header files as well.
- # Builds the library before installing if it does not exist already.
- # Ececutes ldconfig in case of the shared library.
- # Default locations:
- # library: $(exec_prefix)/$(libdir) => /usr/lib
- # headers: $(prefix)/$(includedir) => /usr/include
- #
- # install_headers
- # Installs the header files.
- # Default location: $(prefix)/$(includedir) => /usr/include
- #
- # clean
- # Removes the shared or the static library, depending of the value
- # of the SHARED variable, from this folder and all the folders and objects
- # which were created to build it.
- #
- # uninstall
- # Removes the shared or the static library, depending of the value
- # of the SHARED variable from the system. In case of the shared library,
- # removes the symbolic links as well and executes ldconfig.
- #
- # uninstall_headers
- # Remove the headers from the system.
- #
- # Variables
- # prefix
- # The general installation root directory. Default: /usr
- #
- # exec_prefix
- # The installation root directory to place executables and libraries.
- # Default: prefix
- #
- # libdir
- # The directory where the libraries are installed, as a subdirectory of
- # exec_prefix. Default: lib
- #
- # includedir
- # The directory where the header files are installed, as a subdirectory of
- # prefix. Default: include
- #
- # srcdir
- # The directory where the object source files are located.
- # Default: _internal/Source
- #
- # CXX
- # The compiler to be used. Default: c++
- #
- # CXXFLAGS
- # The compiler flags used to compile the object files.
- # Default:
- # cxxflags_default for default
- # cxxflags_small for BUILD_TYPE=small
- # cxxflags_debug for BUILD_TYPE=debug
- #
- # AR
- # The archiver to be used. Default: ar
- #
- # PIC
- # The PIC to be used. Default: PIC
- #
- # BUILD_TYPE
- # Used to select a specific set of predefined configuration parameters.
- # Default: undefined: The default settings are used
- # Options:
- # small
- # debug
- #
- # SHARED
- # Used to select if the library is a shared or a dynamic one
- # Default: undefined: static
- # Options:
- # 0: static
- # 1: shared
- #
- #
- #
- # JSON source files to build
- objects = internalJSONNode.o JSONAllocator.o JSONChildren.o \
- JSONDebug.o JSONIterators.o JSONMemory.o JSONNode.o \
- JSONNode_Mutex.o JSONPreparse.o JSONStream.o JSONValidator.o \
- JSONWorker.o JSONWriter.o libjson.o
- OS=$(shell uname)
- # Defaults
- ifeq ($(OS), Darwin)
- cxxflags_default = -fast -ffast-math -fexpensive-optimizations -DNDEBUG
- else
- cxxflags_default = -O3 -ffast-math -fexpensive-optimizations -DNDEBUG
- endif
- cxxflags_small = -Os -ffast-math -DJSON_LESS_MEMORY -DNDEBUG
- cxxflags_debug = -g -DJSON_SAFE -DJSON_DEBUG
- cxxflags_shared = -f$(PIC)
- libname = libjson
- libname_hdr := $(libname)
- libname_debug = $(libname)_dbg
- suffix_shared = so
- suffix_static = a
- major_version = 7
- minor_version = 6.1
- objdir = Objects
- # Variables
- prefix ?= /usr
- exec_prefix ?= $(prefix)
- libdir ?= lib
- includedir ?= include
- srcdir ?= _internal/Source
- CXX ?= c++
- AR ?= ar
- PIC ?= PIC
- BUILD_TYPE ?= "default"
- SHARED ?= "1"
- # Internal Variables
- inst_path = $(exec_prefix)/$(libdir)
- include_path = $(prefix)/$(includedir)
- # Usage check
- ifdef CXXFLAGS
- ifdef BUILD_TYPE
- $(error CXXFLAGS and BUILD_TYPE are mutually exclusive)
- endif
- endif
- # BUILD_TYPE specific settings
- ifeq ($(BUILD_TYPE), small)
- CXXFLAGS = $(cxxflags_small)
- else ifeq ($(BUILD_TYPE), debug)
- CXXFLAGS = $(cxxflags_debug)
- libname := $(libname_debug)
- else
- CXXFLAGS ?= $(cxxflags_default)
- endif
- # SHARED specific settings
- ifeq ($(SHARED), 1)
- libname_shared = $(libname).$(suffix_shared)
- libname_shared_major_version = $(libname_shared).$(major_version)
- lib_target = $(libname_shared_major_version).$(minor_version)
- objdir := $(objdir)_shared
- CXXFLAGS := $(CXXFLAGS) $(cxxflags_shared)
- else
- lib_target = $(libname).$(suffix_static)
- objdir := $(objdir)_static
- endif
- # Phony targets
- .PHONY: all banner installdirs install install_headers clean uninstall \
- uninstall_headers
- # Targets
- all: $(lib_target)
- @echo "============================================================"
- @echo "Done"
- @echo "============================================================"
- banner:
- @echo "============================================================"
- @echo "libjson version: "$(major_version).$(minor_version) "target: "$(target) "OS: "$(OS)
- @echo "============================================================"
- installdirs: banner
- mkdir -p $(objdir)
- # Libraries
- ifeq ($(SHARED),1)
- $(lib_target): banner installdirs $(addprefix $(objdir)/, $(objects))
- @echo "Link "
- cd $(objdir) ; \
- if test "$(OS)" = "Darwin" ; then \
- $(CXX) -shared -Wl,-dylib_install_name -Wl,$(libname_shared_major_version) -o $@ $(objects) ; \
- else \
- $(CXX) -shared -Wl,-soname,$(libname_shared_major_version) -o $@ $(objects) ; \
- fi ; \
- mv -f $@ ../
- @echo "Link: Done"
- else
- $(lib_target): banner installdirs $(addprefix $(objdir)/, $(objects))
- @echo "Archive"
- cd $(objdir) ; \
- $(AR) -cvq $@ $(objects) ; \
- mv -f $@ ../
- @echo "Archive: Done"
- endif
- # Compile object files
- $(objdir)/%.o: $(srcdir)/%.cpp
- $(CXX) $< -o $@ -c $(CXXFLAGS)
- ifeq ($(SHARED),1)
- install: banner install_headers $(lib_target)
- @echo "Install shared library"
- cp -f ./$(lib_target) $(inst_path)
- cd $(inst_path) ; \
- ln -sf $(lib_target) $(libname_shared_major_version) ; \
- ln -sf $(libname_shared_major_version) $(libname_shared)
- ifneq ($(OS),Darwin)
- ldconfig
- endif
- @echo "Install shared library: Done."
- else
- install: banner install_headers $(lib_target)
- @echo "Install static library"
- cp -f ./$(lib_target) $(inst_path)
- @echo "Install static library: Done."
- endif
- install_headers: banner
- @echo "Install header files"
- mkdir -p $(include_path)/$(libname_hdr)
- cp -f ./*.h $(include_path)/$(libname_hdr)
- mkdir -p $(include_path)/$(libname_hdr)/$(srcdir)
- cp -f ./$(srcdir)/*.h $(include_path)/$(libname_hdr)/$(srcdir)
- cp -r ./$(srcdir)/JSONDefs $(include_path)/$(libname_hdr)/$(srcdir)
- chmod -R a+r $(include_path)/$(libname_hdr)
- find $(include_path)/$(libname_hdr) -type d -exec chmod a+x {} \;
- cp -rv $(srcdir)/Dependencies/ $(include_path)/$(libname_hdr)/$(srcdir)
- @echo "Install header files: Done."
- clean: banner
- @echo "Clean library and object folder"
- rm -rf $(objdir)
- rm -f $(lib_target)
- @echo "Clean library and object folder: Done"
- ifeq ($(SHARED),1)
- uninstall: banner uninstall_headers
- @echo "Uninstall shared library"
- rm -f $(inst_path)/$(libname_shared)
- rm -f $(inst_path)/$(libname_shared_major_version)
- rm -f $(inst_path)/$(lib_target)
- ifneq ($(OS),Darwin)
- ldconfig
- endif
- @echo "Uninstall shared library: Done"
- else
- uninstall: banner uninstall_headers
- @echo "Uninstall static library"
- rm -f $(inst_path)/$(lib_target)
- @echo "Uninstall static library: Done"
- endif
- uninstall_headers: banner
- @echo "Uninstall header files"
- rm -rf $(include_path)/$(libname_hdr)
- @echo "Uninstall header files: Done"
- test:
- $(CXX) _internal/TestSuite/main.cpp _internal/TestSuite/TestAssign.cpp _internal/TestSuite/TestChildren.cpp \
- _internal/TestSuite/TestComments.cpp _internal/TestSuite/TestConverters.cpp _internal/TestSuite/TestCtors.cpp \
- _internal/TestSuite/TestEquality.cpp _internal/TestSuite/TestFunctions.cpp _internal/TestSuite/TestInequality.cpp \
- _internal/TestSuite/TestInspectors.cpp _internal/TestSuite/TestIterators.cpp _internal/TestSuite/TestMutex.cpp \
- _internal/TestSuite/TestNamespace.cpp _internal/TestSuite/TestRefCounting.cpp _internal/TestSuite/TestSuite.cpp \
- _internal/TestSuite/TestWriter.cpp _internal/TestSuite/TestString.cpp _internal/TestSuite/UnitTest.cpp \
- _internal/TestSuite/TestValidator.cpp _internal/TestSuite/TestStreams.cpp _internal/TestSuite/TestBinary.cpp \
- _internal/TestSuite/RunTestSuite2.cpp _internal/TestSuite/TestSharedString.cpp \
- _internal/Source/internalJSONNode.cpp _internal/Source/JSONPreparse.cpp _internal/Source/JSONChildren.cpp \
- _internal/Source/JSONDebug.cpp _internal/Source/JSONIterators.cpp _internal/Source/JSONMemory.cpp \
- _internal/Source/JSONNode_Mutex.cpp _internal/Source/JSONNode.cpp _internal/Source/JSONWorker.cpp \
- _internal/Source/JSONWriter.cpp _internal/Source/libjson.cpp _internal/Source/JSONValidator.cpp \
- _internal/Source/JSONStream.cpp _internal/Source/JSONAllocator.cpp \
- _internal/TestSuite/TestSuite2/JSON_Base64/json_decode64.cpp \
- _internal/TestSuite/TestSuite2/JSON_Base64/json_encode64.cpp \
- _internal/TestSuite/TestSuite2/JSONDebug/JSON_ASSERT_SAFE.cpp \
- _internal/TestSuite/TestSuite2/JSONDebug/JSON_ASSERT.cpp \
- _internal/TestSuite/TestSuite2/JSONDebug/JSON_FAIL_SAFE.cpp \
- _internal/TestSuite/TestSuite2/JSONDebug/JSON_FAIL.cpp \
- _internal/TestSuite/TestSuite2/JSONGlobals/jsonSingleton.cpp \
- _internal/TestSuite/TestSuite2/JSONValidator/isValidArray.cpp \
- _internal/TestSuite/TestSuite2/JSONValidator/isValidMember.cpp \
- _internal/TestSuite/TestSuite2/JSONValidator/isValidNamedObject.cpp \
- _internal/TestSuite/TestSuite2/JSONValidator/isValidNumber.cpp \
- _internal/TestSuite/TestSuite2/JSONValidator/isValidObject.cpp \
- _internal/TestSuite/TestSuite2/JSONValidator/isValidPartialRoot.cpp \
- _internal/TestSuite/TestSuite2/JSONValidator/isValidRoot.cpp \
- _internal/TestSuite/TestSuite2/JSONValidator/isValidString.cpp \
- _internal/TestSuite/TestSuite2/JSONValidator/securityTest.cpp \
- _internal/TestSuite/TestSuite2/NumberToString/_areFloatsEqual.cpp \
- _internal/TestSuite/TestSuite2/NumberToString/_atof.cpp \
- _internal/TestSuite/TestSuite2/NumberToString/_ftoa.cpp \
- _internal/TestSuite/TestSuite2/NumberToString/_itoa.cpp \
- _internal/TestSuite/TestSuite2/NumberToString/_uitoa.cpp \
- _internal/TestSuite/TestSuite2/NumberToString/getLenSize.cpp \
- _internal/TestSuite/TestSuite2/NumberToString/isNumeric.cpp \
- $(CXXFLAGS) -o ./testapp
- ./testapp
|