diff --git a/.gitignore b/.gitignore index 496b9a2d5a..440a39b759 100644 --- a/.gitignore +++ b/.gitignore @@ -27,6 +27,7 @@ objs/ temp/ temp-python* lib/ +install/ examples/csharp/solution/*.csproj examples/csharp/*.sln examples/notebook/.ipynb_checkpoints @@ -80,4 +81,4 @@ tools/netstandard/CreateSigningKey/obj ortools/fsharp/**/bin ortools/fsharp/**/obj -ortools/fsharp/**/packages \ No newline at end of file +ortools/fsharp/**/packages diff --git a/makefiles/Makefile.cpp.mk b/makefiles/Makefile.cpp.mk index 0d2844c48b..46dfebb044 100755 --- a/makefiles/Makefile.cpp.mk +++ b/makefiles/Makefile.cpp.mk @@ -10,6 +10,14 @@ else @echo endif +# Checks if the user has overwritten default install prefix. +# cf https://www.gnu.org/prep/standards/html_node/Directory-Variables.html#index-prefix +ifeq ($(SYSTEM),win) + prefix ?= C:\\Program Files\\or-tools +else + prefix ?= /usr/local +endif + # Main target .PHONY: cc # Build C++ OR-Tools. cc: ortoolslibs ccexe @@ -799,6 +807,46 @@ rcc: $(BIN_DIR)$S$(basename $(notdir $(EX)))$E @echo running $(BIN_DIR)$S$(basename $(notdir $(EX)))$E $(BIN_DIR)$S$(basename $(notdir $(EX)))$E $(ARGS) +############### +## INSTALL ## +############### +install_dirs: + -$(MKDIR) "$(prefix)" + -$(MKDIR) "$(prefix)$Slib" + -$(MKDIR) "$(prefix)$Sinclude" + -$(DELREC) "$(prefix)$Sinclude$Sortools" + $(MKDIR) "$(prefix)$Sinclude$Sortools" + $(MKDIR) "$(prefix)$Sinclude$Sortools$Salgorithms" + $(MKDIR) "$(prefix)$Sinclude$Sortools$Sbase" + $(MKDIR) "$(prefix)$Sinclude$Sortools$Sbop" + $(MKDIR) "$(prefix)$Sinclude$Sortools$Sconstraint_solver" + $(MKDIR) "$(prefix)$Sinclude$Sortools$Sglop" + $(MKDIR) "$(prefix)$Sinclude$Sortools$Sgraph" + $(MKDIR) "$(prefix)$Sinclude$Sortools$Slinear_solver" + $(MKDIR) "$(prefix)$Sinclude$Sortools$Slp_data" + $(MKDIR) "$(prefix)$Sinclude$Sortools$Ssat" + $(MKDIR) "$(prefix)$Sinclude$Sortools$Sutil" + +.PHONY: install_cc # Install C++ OR-Tools to $(prefix)/. +install_cc: ortoolslibs $(PATCHELF) install_dirs + $(COPY) $(LIB_DIR)$S$(LIB_PREFIX)ortools.$(LIB_SUFFIX) "$(prefix)$Slib" + $(COPY) ortools$Salgorithms$S*.h "$(prefix)$Sinclude$Sortools$Salgorithms" + $(COPY) ortools$Sbase$S*.h "$(prefix)$Sinclude$Sortools$Sbase" + $(COPY) ortools$Sconstraint_solver$S*.h "$(prefix)$Sinclude$Sortools$Sconstraint_solver" + $(COPY) ortools$Sgen$Sortools$Sconstraint_solver$S*.pb.h "$(prefix)$Sinclude$Sortools$Sconstraint_solver" + $(COPY) ortools$Sbop$S*.h "$(prefix)$Sinclude$Sortools$Sbop" + $(COPY) ortools$Sgen$Sortools$Sbop$S*.pb.h "$(prefix)$Sinclude$Sortools$Sbop" + $(COPY) ortools$Sglop$S*.h "$(prefix)$Sinclude$Sortools$Sglop" + $(COPY) ortools$Sgen$Sortools$Sglop$S*.pb.h "$(prefix)$Sinclude$Sortools$Sglop" + $(COPY) ortools$Sgraph$S*.h "$(prefix)$Sinclude$Sortools$Sgraph" + $(COPY) ortools$Sgen$Sortools$Sgraph$S*.h "$(prefix)$Sinclude$Sortools$Sgraph" + $(COPY) ortools$Slinear_solver$S*.h "$(prefix)$Sinclude$Sortools$Slinear_solver" + $(COPY) ortools$Slp_data$S*.h "$(prefix)$Sinclude$Sortools$Slp_data" + $(COPY) ortools$Sgen$Sortools$Slinear_solver$S*.pb.h "$(prefix)$Sinclude$Sortools$Slinear_solver" + $(COPY) ortools$Ssat$S*.h "$(prefix)$Sinclude$Sortools$Ssat" + $(COPY) ortools$Sgen$Sortools$Ssat$S*.pb.h "$(prefix)$Sinclude$Sortools$Ssat" + $(COPY) ortools$Sutil$S*.h "$(prefix)$Sinclude$Sortools$Sutil" + .PHONY: detect_cc # Show variables used to build C++ OR-Tools. detect_cc: @echo Relevant info for the C++ build: diff --git a/makefiles/Makefile.install.mk b/makefiles/Makefile.install.mk index 88cb3070bc..459629f90a 100644 --- a/makefiles/Makefile.install.mk +++ b/makefiles/Makefile.install.mk @@ -1,54 +1,21 @@ -create_install_dirs: - -$(MKDIR) $(TARGET_DIR) - -$(MKDIR) $(TARGET_DIR)$Slib - -$(MKDIR) $(TARGET_DIR)$Sbin - -$(MKDIR) $(TARGET_DIR)$Sinclude - -$(MKDIR) $(TARGET_DIR)$Sinclude$Sgflags - -$(MKDIR) $(TARGET_DIR)$Sinclude$Sglog - -$(MKDIR) $(TARGET_DIR)$Sinclude$Sgoogle - -$(DELREC) $(TARGET_DIR)$Sinclude$Sortools - $(MKDIR) $(TARGET_DIR)$Sinclude$Sortools - $(MKDIR) $(TARGET_DIR)$Sinclude$Sortools$Salgorithms - $(MKDIR) $(TARGET_DIR)$Sinclude$Sortools$Sbase - $(MKDIR) $(TARGET_DIR)$Sinclude$Sortools$Sbop - $(MKDIR) $(TARGET_DIR)$Sinclude$Sortools$Sconstraint_solver - $(MKDIR) $(TARGET_DIR)$Sinclude$Sortools$Sglop - $(MKDIR) $(TARGET_DIR)$Sinclude$Sortools$Sgraph - $(MKDIR) $(TARGET_DIR)$Sinclude$Sortools$Slinear_solver - $(MKDIR) $(TARGET_DIR)$Sinclude$Sortools$Slp_data - $(MKDIR) $(TARGET_DIR)$Sinclude$Sortools$Ssat - $(MKDIR) $(TARGET_DIR)$Sinclude$Sortools$Sutil +install_deps_dirs: + -$(MKDIR_P) "$(prefix)$Sinclude$Sgflags" + -$(MKDIR_P) "$(prefix)$Sinclude$Sglog" + -$(MKDIR_P) "$(prefix)$Sinclude$Sgoogle" -install_cc: create_install_dirs cc $(PATCHELF) - $(COPY) $(LIB_DIR)$S$(LIB_PREFIX)ortools.$(LIB_SUFFIX) $(TARGET_DIR)$Slib - $(COPY) ortools$Salgorithms$S*.h $(TARGET_DIR)$Sinclude$Sortools$Salgorithms - $(COPY) ortools$Sbase$S*.h $(TARGET_DIR)$Sinclude$Sortools$Sbase - $(COPY) ortools$Sconstraint_solver$S*.h $(TARGET_DIR)$Sinclude$Sortools$Sconstraint_solver - $(COPY) ortools$Sgen$Sortools$Sconstraint_solver$S*.pb.h $(TARGET_DIR)$Sinclude$Sortools$Sconstraint_solver - $(COPY) ortools$Sbop$S*.h $(TARGET_DIR)$Sinclude$Sortools$Sbop - $(COPY) ortools$Sgen$Sortools$Sbop$S*.pb.h $(TARGET_DIR)$Sinclude$Sortools$Sbop - $(COPY) ortools$Sglop$S*.h $(TARGET_DIR)$Sinclude$Sortools$Sglop - $(COPY) ortools$Sgen$Sortools$Sglop$S*.pb.h $(TARGET_DIR)$Sinclude$Sortools$Sglop - $(COPY) ortools$Sgraph$S*.h $(TARGET_DIR)$Sinclude$Sortools$Sgraph - $(COPY) ortools$Sgen$Sortools$Sgraph$S*.h $(TARGET_DIR)$Sinclude$Sortools$Sgraph - $(COPY) ortools$Slinear_solver$S*.h $(TARGET_DIR)$Sinclude$Sortools$Slinear_solver - $(COPY) ortools$Slp_data$S*.h $(TARGET_DIR)$Sinclude$Sortools$Slp_data - $(COPY) ortools$Sgen$Sortools$Slinear_solver$S*.pb.h $(TARGET_DIR)$Sinclude$Sortools$Slinear_solver - $(COPY) ortools$Ssat$S*.h $(TARGET_DIR)$Sinclude$Sortools$Ssat - $(COPY) ortools$Sgen$Sortools$Ssat$S*.pb.h $(TARGET_DIR)$Sinclude$Sortools$Ssat - $(COPY) ortools$Sutil$S*.h $(TARGET_DIR)$Sinclude$Sortools$Sutil +install_full_cc: install_cc install_deps_dirs ifeq ($(SYSTEM),win) - tools\tar.exe -cf - -C dependencies$Sinstall$Sinclude gflags | tools\tar.exe -xpf - -C $(TARGET_DIR)$Sinclude - tools\tar.exe -cf - -C dependencies$Sinstall$Sinclude glog | tools\tar.exe -xpf - -C $(TARGET_DIR)$Sinclude - tools\tar.exe -cf - -C dependencies$Sinstall$Sinclude google | tools\tar.exe -xpf - -C $(TARGET_DIR)$Sinclude + tools\tar.exe -cf - -C dependencies$Sinstall$Sinclude gflags | tools\tar.exe -xpf - -C "$(prefix)$Sinclude" + tools\tar.exe -cf - -C dependencies$Sinstall$Sinclude glog | tools\tar.exe -xpf - -C "$(prefix)$Sinclude" + tools\tar.exe -cf - -C dependencies$Sinstall$Sinclude google | tools\tar.exe -xpf - -C "$(prefix)$Sinclude" else - tar -cf - -C dependencies$Sinstall$Sinclude gflags | tar -xpf - -C $(TARGET_DIR)$Sinclude - tar -cf - -C dependencies$Sinstall$Sinclude glog | tar -xpf - -C $(TARGET_DIR)$Sinclude - tar -cf - -C dependencies$Sinstall$Sinclude google | tar -xpf - -C $(TARGET_DIR)$Sinclude + tar -cf - -C dependencies$Sinstall$Sinclude gflags | tar -xpf - -C "$(prefix)$Sinclude" + tar -cf - -C dependencies$Sinstall$Sinclude glog | tar -xpf - -C "$(prefix)$Sinclude" + tar -cf - -C dependencies$Sinstall$Sinclude google | tar -xpf - -C "$(prefix)$Sinclude" endif - $(COPY) LICENSE-2.0.txt $(TARGET_DIR) + $(COPY) LICENSE-2.0.txt "$(prefix)" ifeq ($(PLATFORM),MACOSX) - $(COPY) tools/install_libortools_mac.sh $(TARGET_DIR) - chmod 775 $(TARGET_DIR)/install_libortools_mac.sh - cd $(TARGET_DIR) && ./install_libortools_mac.sh && rm install_libortools_mac.sh + $(COPY) tools/install_libortools_mac.sh "$(prefix)" + chmod 775 "$(prefix)/install_libortools_mac.sh" + cd "$(prefix)" && ./install_libortools_mac.sh && rm install_libortools_mac.sh endif