| @@ -0,0 +1,9 @@ | |||
| This file lists people who have made significant contribution in the Septime | |||
| project. Please see the ChangeLog for specific changes by author. | |||
| ------------------------------------------------------------------------- | |||
| Patrick Foubet <patrick@e2li.org> | |||
| * Original program author, stable series maintainer. | |||
| * Cohesion of language supervisor. Multiple platform maintainer. | |||
| @@ -0,0 +1,232 @@ | |||
| History of Nife releases : | |||
| 2022-01-04 - Nife 0.61 is released. | |||
| * Added a definition of HUGE for compilers that no longer have it in | |||
| math.h. Thanks to Jacques Godfrain Kounkou for his bug report ! | |||
| * Added some "include" where it was missing. | |||
| 2019-01-27 - Nife 0.60 is released. | |||
| * Updated headers to show that the project is still alive ! | |||
| * The Nife official site is now : https://www.seriane.org/nife/ | |||
| 2016-08-15 - Nife 0.59 is released. | |||
| * Add implementation of data meta-stacks tools for context swapping : | |||
| [ and ] for respectively increment and decrement the numerical stack, | |||
| { and } to do theses operations with the character stack, | |||
| ( and ) to do the same thing with the logical stack, | |||
| and [* and ]* to operate on the three stacks. | |||
| * Fixed a bug causing an error with network functions netDt> and NetKey. | |||
| * The Nife official site is now : http://www.nifesys.org. | |||
| 2015-08-10 - Nife 0.55 is released. | |||
| * Changing the log file contents to be able to use it for debugging. | |||
| The log file is in the subdirectory .nife. His name is the type | |||
| .nife_PID.log, PID being its number of pid. | |||
| We can display the content in real time with tail -f. | |||
| The .nifeNS_pid.log and .nifeRPC_PID.log files are those of the | |||
| server networks and its bodies. | |||
| Log files are deleted at the end of the Nife session unless an error | |||
| occured. | |||
| * Added "savelog function to save the logs before going out. | |||
| * Placing aid debugging functions. All these functions begin with the _ | |||
| character and are listed with ?libp function. | |||
| * Added shell script command, ex/NifeDebugTerms, to facilitate | |||
| establishment and closing of the display terminals for the logs. | |||
| * Added the possibility, in graphic mode, to open or close | |||
| terminals with keys 'home' and 'end'. These functionalities are | |||
| based on performance in the window manager of the above script. | |||
| * Reorganization of system functions in the function stack. | |||
| * Improved tasks and consoles. | |||
| * Added the ability to execute external command interactively, with the | |||
| character ! at the beginning of the line. | |||
| 2014-08-31 - Nife 0.51 is released. | |||
| * Finalising the version 1.0 of the functions dump and restore with the | |||
| definition of the NBLF, Nife Binary Linkable Format. | |||
| * Modify some labels to clarify the perception of internal mechanisms. | |||
| * Some modifications to avoid unnecessary warnings at compilation. | |||
| * Temporary suspension of some functions related to the dynamic aspect | |||
| of the language because, used improperly, it could be dangerous. | |||
| These functions will be include again, but with more explanations and | |||
| examples. | |||
| 2014-06-27 - Nife 0.49 is released. | |||
| * Add DEC, HEX, OCT and BIN functions to define the print mode for the | |||
| integers. The default is decimal. | |||
| * Modify signals comportment to accept interrupt from terminal to stop | |||
| execution in the main (interactive) task. | |||
| * Fixed an error in the case of the end: label is before the onerr: one. | |||
| * Fixed a bug when a signal "segmentation violation" is catched. | |||
| * Add some help facilities suggested by Alain Empain, until his tools | |||
| are efficient in Nife. | |||
| * Beginning the functions dump and restore with definition of the NBLF, | |||
| Nife Binary Linkable Format (just for a Request for Comments ;-). | |||
| * The installation has been tested by Gaetan Angely on three ARM SBCs: | |||
| Raspberry Pi, Beaglebone Black, ODROID-U3 with Arch Linux ARM. | |||
| All information about Arch Linux ARM at http://archlinuxarm.org/. | |||
| He have compared with two Intel processors and have published a | |||
| benchmak on the two mailing lists. | |||
| 2014-05-10 - Nife 0.47 is released. | |||
| * Beginning an I2C interface for Linux systems, inspired by the Linux | |||
| package i2c-tools. | |||
| * The I2C interface has been developped and tested by P. Foubet | |||
| with his students Elodie Kerfourn and Aymeric Diankouika. They | |||
| connected a Raspberry Pi with an Arduino board through the I2C bus | |||
| and wrote a Nife program to highlight the data exchange between the | |||
| two elements. | |||
| * The installation has been tested by Bernard Bonno on a Raspberry Pi | |||
| board Model A with Porteus ARM (based on a Slackware ARM 14.0). | |||
| 2013-09-25 - Nife 0.44 is released. | |||
| * Fixed a bug causing a "segmentation violation" during compilation | |||
| of the Nife code on some systems as Raspberry Pi A and B and others. | |||
| This bug was reported by Bernard Bonno during tests on a Raspberry Pi | |||
| Model A with 256 Mo of memory. | |||
| * The installation has been tested by Bernard Bonno on a PC i484 | |||
| with a Linux Porteus 2.0. | |||
| All information about Porteus at http://www.porteus.org/. | |||
| 2013-09-09 - Nife 0.43 is released. | |||
| * Establishment of a sub-directory .nife to facilitate debugging and | |||
| store temporary files. | |||
| * Update some functions dependant on working directory. | |||
| * Fixed some bugs in the gplot tools due to new versions of gnuplot. | |||
| * The installation has been tested by Patrick Foubet on a Raspberry Pi | |||
| board Model B with standard Raspbian (Squeeze). | |||
| All information about the board at http://www.raspberrypi.org/faqs. | |||
| 2012-10-23 - Nife 0.405 is released. | |||
| * Fixed a bug in the data transfer protocol STSP. | |||
| * Adding Dt indicators in the list giving by ?n function. | |||
| * Fixed a bug in the netDt> function. | |||
| * The installation has been tested by Patrick Foubet on a Beaglebone | |||
| board (Linux beaglebone 3.2.5+ #1 ... armv7l GNU/Linux) lended by the | |||
| school ESME Sudria for preparing a course on Linux drivers. | |||
| All information about the board at http://beagleboard.org/bone. | |||
| 2012-09-01 - Nife 0.401 is released. | |||
| * Beginning the multi-threading mechanisms based on POSIX thread. | |||
| * Adding programmation tools end: and goto_end. | |||
| * Increasing error tracking : | |||
| - giving the file name and the line number, | |||
| - stopping compilation at first error, | |||
| - allowing load in load. | |||
| - adding functions ?err, noerr, messerr, ?lasterr and onerr: label. | |||
| * Dynamic code tools : | |||
| - "load to load a file in a user function, | |||
| - "exec to compile some code in a user function, | |||
| - functions ' and ` to specify names to be executed latter. | |||
| * Limit for all names at 24 characters. | |||
| * Modifying install variables functions to work in user functions. | |||
| * Adding the free-context loop with do mechanisms : | |||
| - do_next to bypass a loop in free-context, | |||
| - do_leave and *do_leave to leave one or many loops in free-context, | |||
| * Updating the sh command to use the SHELL environment variable. | |||
| 2012-07-05 - Nife 0.341 is released. | |||
| * Adding more fonctions to deal with devices with Comedilib : | |||
| - write fonction available, | |||
| - define a default set of parameters to simplify programs. | |||
| * Update documentation for theses new commands. | |||
| 2012-06-10 - Nife 0.323 is released. | |||
| * Continuing distributed systems tools elaborated with Thomas Pabst : | |||
| - Adding netCompile to load a Nife file on a remote Nife using NetKey. | |||
| If this file contains a call of one or more functions, they will be | |||
| executed, and the result will be send on the Net using NetKey. | |||
| - Adding NetErr to get the Net Error value. | |||
| * Adding the ex directory in src with some program examples : | |||
| - gp.nif, an example for gplot functions, | |||
| - rpc.nif and rpc2.nif for Nife RPC example. | |||
| 2012-06-06 - Nife 0.320 is released. | |||
| * Beginning of the gplot module for use of gnuplot (www.gnuplot.info). | |||
| * adding theses functions : | |||
| - gplot and gplotM (multiple) to create gplots, | |||
| - gplotCmd to append text to the plot command, | |||
| - ?gp to list the gplots, | |||
| - del_gplot to delete a gplot, | |||
| - gplotAdd and gplotRepl (with replacement) to add values to plots, | |||
| - gplotClear to clear a display panel. | |||
| * The installation has been tested by Bruno Guilbert on a Fox board G20 | |||
| (Debian debarm 2.6.38 with CPU Atmel AT91SAM9G20 based on ARM926EJ-S) | |||
| with the students TRSE2 of Ingesup-Paris : | |||
| All information about the board at www.acmesystems.it. | |||
| 2012-05-22 - Nife 0.317 is released. | |||
| * Adding ndepth giving network stack depth using NetKey, | |||
| * Definition of principles for Nife RPC (remote procedure call). | |||
| * Adding netExec to execute a function on a remote Nife using NetKey. | |||
| * The installation has been tested by Dr Alain Empain (ulg.ac.be) on | |||
| Ubuntu Lucid 10.O4 (Linux 2.6.38-15 - x86_64) | |||
| * The installation has been tested by Paul Bartoldi (unige.ch) on | |||
| Ubuntu 12.O4 LTS (Linux 3.0.0-12 - x86_32) | |||
| 2012-05-11 - Nife 0.315 is released. | |||
| * Beginning of distributed systems tools elaborated with Thomas Pabst : | |||
| - automatic evaluation of the dt values at network connection, | |||
| - adding netDt> to get the clock difference value beetween "network" | |||
| and Nife system. | |||
| * The installation has been tested on | |||
| Debian Wheezy Testing (Linux 3.2.0-2 - x86_32) | |||
| 2012-05-04 - Nife 0.311 is released. | |||
| * Modifying errors traps to get a better bug resolution. | |||
| * The installation has been tested by Bernard Perrin (csem.ch) on | |||
| MacOS X Snow Leopard 10.6.8 (Darwin Kernel Vers 10.8.0 - x86_32) | |||
| 2012-03-16 - Nife 0.307 is released. | |||
| * Adding auto-convergent loop : do ... loop | |||
| * Adding standards loop : do ... +loop | |||
| * Possibility to test the loop level and use indexes I, J and K. | |||
| * Adding del_ofunc to delete, by name, the oldest function, | |||
| * Adding del_afunc to delete all functions beginning by a prefix, | |||
| * Adding "exec to execute a user function giving her name on the | |||
| character stack. | |||
| * Adding "Var to create a variable giving her name on the character | |||
| stack. | |||
| * Rename functions sub[] in []-sub and *sub[] in *[]-sub to adopt a | |||
| more logical notation. | |||
| 2012-03-08 - Nife 0.303 is released. | |||
| * This release is specially dedicated to my wife Christine. | |||
| * Now you can use nife with redirection or pîpe : | |||
| nife < fic.nif or cat fic.nif | nife | |||
| Thank you to Denis Bodor for the idea ! | |||
| 2012-02-22 - Nife 0.302 is released. | |||
| * Christophe Ondrejec has validate the site nife-project.org | |||
| * Updating README, NEWS and all informations files. | |||
| * The installation has been tested on : | |||
| - Debian Lenny (Linux 2.6.26-2 - x86_32) | |||
| - Debian Squeeze (Linux 2.6.32-5 - x86_64) | |||
| - Mac OS X (Darwin Kernel Version 8.11.1 - x86_32) | |||
| - Open BSD (Version 5.0 GENERIC#43 - x86_32) | |||
| - Solaris 11 (SunOS v 5.11 - x86_32) | |||
| - Fedora Core 15 (Linux 2.6.38-6 - x86_32) | |||
| - Open Suze 12.1 (Linux 3.1.0-1 - x86_64) | |||
| * Adding a benchmark test. | |||
| 2012-02-13 - Nife 0.300 is released (internal). | |||
| * Upgrading for working on both 32 or 64 bits. | |||
| * Upgrading SCS (Sister Chip Signature) to accept data from machine | |||
| differents on code or addresses but using compatible datas. | |||
| * Integration of the GNU Autotools to generate the packages. | |||
| 2011-11-13 - Nife 0.212 is released. | |||
| * Network tools with STSP (stack to stack protocol) v0.5 : | |||
| ie WITH ScS (Sister chip signature) v 1. | |||
| * correction of function []trot. | |||
| * new function []transp to transpose matrix. | |||
| 2011-11-09 - Nife 0.209 is released. | |||
| * Network tools with STSP (stack to stack protocol) v.0 : | |||
| ie without ScS (Sister chip signature). | |||
| 2011-10-31 - Nife 0.204 is released. | |||
| 2011-10-26 - Nife 0.200 is released. | |||
| 2011-09-18 - Nife 0.113 the first public release on Sourceforge.net. | |||
| @@ -0,0 +1,235 @@ | |||
| Installation Instructions | |||
| ************************* | |||
| Copyright (C) 1994 to 2024 Free Software Foundation, Inc. | |||
| This file is free documentation; the Free Software Foundation gives | |||
| unlimited permission to copy, distribute and modify it. | |||
| Basic Installation | |||
| ================== | |||
| These are generic installation instructions. | |||
| The `configure' shell script attempts to guess correct values for | |||
| various system-dependent variables used during compilation. It uses | |||
| those values to create a `Makefile' in each directory of the package. | |||
| It may also create one or more `.h' files containing system-dependent | |||
| definitions. Finally, it creates a shell script `config.status' that | |||
| you can run in the future to recreate the current configuration, and a | |||
| file `config.log' containing compiler output (useful mainly for | |||
| debugging `configure'). | |||
| It can also use an optional file (typically called `config.cache' | |||
| and enabled with `--cache-file=config.cache' or simply `-C') that saves | |||
| the results of its tests to speed up reconfiguring. (Caching is | |||
| disabled by default to prevent problems with accidental use of stale | |||
| cache files.) | |||
| If you need to do unusual things to compile the package, please try | |||
| to figure out how `configure' could check whether to do them, and mail | |||
| diffs or instructions to the address given in the `README' so they can | |||
| be considered for the next release. If you are using the cache, and at | |||
| some point `config.cache' contains results you don't want to keep, you | |||
| may remove or edit it. | |||
| The file `configure.ac' (or `configure.in') is used to create | |||
| `configure' by a program called `autoconf'. You only need | |||
| `configure.ac' if you want to change it or regenerate `configure' using | |||
| a newer version of `autoconf'. | |||
| The simplest way to compile this package is: | |||
| 1. `cd' to the directory containing the package's source code and type | |||
| `./configure' to configure the package for your system. If you're | |||
| using `csh' on an old version of System V, you might need to type | |||
| `sh ./configure' instead to prevent `csh' from trying to execute | |||
| `configure' itself. | |||
| Running `configure' takes awhile. While running, it prints some | |||
| messages telling which features it is checking for. | |||
| 2. Type `make' to compile the package. | |||
| 3. Optionally, type `make check' to run any self-tests that come with | |||
| the package. | |||
| 4. Type `make install' to install the programs and any data files and | |||
| documentation. | |||
| 5. You can remove the program binaries and object files from the | |||
| source code directory by typing `make clean'. To also remove the | |||
| files that `configure' created (so you can compile the package for | |||
| a different kind of computer), type `make distclean'. There is | |||
| also a `make maintainer-clean' target, but that is intended mainly | |||
| for the package's developers. If you use it, you may have to get | |||
| all sorts of other programs in order to regenerate files that came | |||
| with the distribution. | |||
| Compilers and Options | |||
| ===================== | |||
| Some systems require unusual options for compilation or linking that the | |||
| `configure' script does not know about. Run `./configure --help' for | |||
| details on some of the pertinent environment variables. | |||
| You can give `configure' initial values for configuration parameters | |||
| by setting variables in the command line or in the environment. Here | |||
| is an example: | |||
| ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix | |||
| *Note Defining Variables::, for more details. | |||
| Compiling For Multiple Architectures | |||
| ==================================== | |||
| You can compile the package for more than one kind of computer at the | |||
| same time, by placing the object files for each architecture in their | |||
| own directory. To do this, you must use a version of `make' that | |||
| supports the `VPATH' variable, such as GNU `make'. `cd' to the | |||
| directory where you want the object files and executables to go and run | |||
| the `configure' script. `configure' automatically checks for the | |||
| source code in the directory that `configure' is in and in `..'. | |||
| If you have to use a `make' that does not support the `VPATH' | |||
| variable, you have to compile the package for one architecture at a | |||
| time in the source code directory. After you have installed the | |||
| package for one architecture, use `make distclean' before reconfiguring | |||
| for another architecture. | |||
| Installation Names | |||
| ================== | |||
| By default, `make install' installs the package's commands under | |||
| `/usr/local/bin', include files under `/usr/local/include', etc. You | |||
| can specify an installation prefix other than `/usr/local' by giving | |||
| `configure' the option `--prefix=PREFIX'. | |||
| You can specify separate installation prefixes for | |||
| architecture-specific files and architecture-independent files. If you | |||
| pass the option `--exec-prefix=PREFIX' to `configure', the package uses | |||
| PREFIX as the prefix for installing programs and libraries. | |||
| Documentation and other data files still use the regular prefix. | |||
| In addition, if you use an unusual directory layout you can give | |||
| options like `--bindir=DIR' to specify different values for particular | |||
| kinds of files. Run `configure --help' for a list of the directories | |||
| you can set and what kinds of files go in them. | |||
| If the package supports it, you can cause programs to be installed | |||
| with an extra prefix or suffix on their names by giving `configure' the | |||
| option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. | |||
| Optional Features | |||
| ================= | |||
| Some packages pay attention to `--enable-FEATURE' options to | |||
| `configure', where FEATURE indicates an optional part of the package. | |||
| They may also pay attention to `--with-PACKAGE' options, where PACKAGE | |||
| is something like `gnu-as' or `x' (for the X Window System). The | |||
| `README' should mention any `--enable-' and `--with-' options that the | |||
| package recognizes. | |||
| For packages that use the X Window System, `configure' can usually | |||
| find the X include and library files automatically, but if it doesn't, | |||
| you can use the `configure' options `--x-includes=DIR' and | |||
| `--x-libraries=DIR' to specify their locations. | |||
| Specifying the System Type | |||
| ========================== | |||
| There may be some features `configure' cannot figure out automatically, | |||
| but needs to determine by the type of machine the package will run on. | |||
| Usually, assuming the package is built to be run on the _same_ | |||
| architectures, `configure' can figure that out, but if it prints a | |||
| message saying it cannot guess the machine type, give it the | |||
| `--build=TYPE' option. TYPE can either be a short name for the system | |||
| type, such as `sun4', or a canonical name which has the form: | |||
| CPU-COMPANY-SYSTEM | |||
| where SYSTEM can have one of these forms: | |||
| OS KERNEL-OS | |||
| See the file `config.sub' for the possible values of each field. If | |||
| `config.sub' isn't included in this package, then this package doesn't | |||
| need to know the machine type. | |||
| If you are _building_ compiler tools for cross-compiling, you should | |||
| use the option `--target=TYPE' to select the type of system they will | |||
| produce code for. | |||
| If you want to _use_ a cross compiler, that generates code for a | |||
| platform different from the build platform, you should specify the | |||
| "host" platform (i.e., that on which the generated programs will | |||
| eventually be run) with `--host=TYPE'. | |||
| Sharing Defaults | |||
| ================ | |||
| If you want to set default values for `configure' scripts to share, you | |||
| can create a site shell script called `config.site' that gives default | |||
| values for variables like `CC', `cache_file', and `prefix'. | |||
| `configure' looks for `PREFIX/share/config.site' if it exists, then | |||
| `PREFIX/etc/config.site' if it exists. Or, you can set the | |||
| `CONFIG_SITE' environment variable to the location of the site script. | |||
| A warning: not all `configure' scripts look for a site script. | |||
| Defining Variables | |||
| ================== | |||
| Variables not defined in a site shell script can be set in the | |||
| environment passed to `configure'. However, some packages may run | |||
| configure again during the build, and the customized values of these | |||
| variables may be lost. In order to avoid this problem, you should set | |||
| them in the `configure' command line, using `VAR=value'. For example: | |||
| ./configure CC=/usr/local2/bin/gcc | |||
| causes the specified `gcc' to be used as the C compiler (unless it is | |||
| overridden in the site shell script). Here is a another example: | |||
| /bin/bash ./configure CONFIG_SHELL=/bin/bash | |||
| Here the `CONFIG_SHELL=/bin/bash' operand causes subsequent | |||
| configuration-related scripts to be executed by `/bin/bash'. | |||
| `configure' Invocation | |||
| ====================== | |||
| `configure' recognizes the following options to control how it operates. | |||
| `--help' | |||
| `-h' | |||
| Print a summary of the options to `configure', and exit. | |||
| `--version' | |||
| `-V' | |||
| Print the version of Autoconf used to generate the `configure' | |||
| script, and exit. | |||
| `--cache-file=FILE' | |||
| Enable the cache: use and save the results of the tests in FILE, | |||
| traditionally `config.cache'. FILE defaults to `/dev/null' to | |||
| disable caching. | |||
| `--config-cache' | |||
| `-C' | |||
| Alias for `--cache-file=config.cache'. | |||
| `--quiet' | |||
| `--silent' | |||
| `-q' | |||
| Do not print messages saying which checks are being made. To | |||
| suppress all normal output, redirect it to `/dev/null' (any error | |||
| messages will still be shown). | |||
| `--srcdir=DIR' | |||
| Look for the package's source code in directory DIR. Usually | |||
| `configure' can determine that directory automatically. | |||
| `configure' also accepts some other, not widely useful, options. Run | |||
| `configure --help' for more details. | |||
| @@ -0,0 +1,7 @@ | |||
| ##################################################### | |||
| # Makefile.am for septime project : upper directory # | |||
| ##################################################### | |||
| EXTRA_DIST = src/regles.txt | |||
| SUBDIRS=src | |||
| @@ -0,0 +1,782 @@ | |||
| # Makefile.in generated by automake 1.16.1 from Makefile.am. | |||
| # @configure_input@ | |||
| # Copyright (C) 1994-2018 Free Software Foundation, Inc. | |||
| # This Makefile.in is free software; the Free Software Foundation | |||
| # gives unlimited permission to copy and/or distribute it, | |||
| # with or without modifications, as long as this notice is preserved. | |||
| # This program is distributed in the hope that it will be useful, | |||
| # but WITHOUT ANY WARRANTY, to the extent permitted by law; without | |||
| # even the implied warranty of MERCHANTABILITY or FITNESS FOR A | |||
| # PARTICULAR PURPOSE. | |||
| @SET_MAKE@ | |||
| ##################################################### | |||
| # Makefile.am for septime project : upper directory # | |||
| ##################################################### | |||
| VPATH = @srcdir@ | |||
| am__is_gnu_make = { \ | |||
| if test -z '$(MAKELEVEL)'; then \ | |||
| false; \ | |||
| elif test -n '$(MAKE_HOST)'; then \ | |||
| true; \ | |||
| elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ | |||
| true; \ | |||
| else \ | |||
| false; \ | |||
| fi; \ | |||
| } | |||
| am__make_running_with_option = \ | |||
| case $${target_option-} in \ | |||
| ?) ;; \ | |||
| *) echo "am__make_running_with_option: internal error: invalid" \ | |||
| "target option '$${target_option-}' specified" >&2; \ | |||
| exit 1;; \ | |||
| esac; \ | |||
| has_opt=no; \ | |||
| sane_makeflags=$$MAKEFLAGS; \ | |||
| if $(am__is_gnu_make); then \ | |||
| sane_makeflags=$$MFLAGS; \ | |||
| else \ | |||
| case $$MAKEFLAGS in \ | |||
| *\\[\ \ ]*) \ | |||
| bs=\\; \ | |||
| sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | |||
| | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ | |||
| esac; \ | |||
| fi; \ | |||
| skip_next=no; \ | |||
| strip_trailopt () \ | |||
| { \ | |||
| flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ | |||
| }; \ | |||
| for flg in $$sane_makeflags; do \ | |||
| test $$skip_next = yes && { skip_next=no; continue; }; \ | |||
| case $$flg in \ | |||
| *=*|--*) continue;; \ | |||
| -*I) strip_trailopt 'I'; skip_next=yes;; \ | |||
| -*I?*) strip_trailopt 'I';; \ | |||
| -*O) strip_trailopt 'O'; skip_next=yes;; \ | |||
| -*O?*) strip_trailopt 'O';; \ | |||
| -*l) strip_trailopt 'l'; skip_next=yes;; \ | |||
| -*l?*) strip_trailopt 'l';; \ | |||
| -[dEDm]) skip_next=yes;; \ | |||
| -[JT]) skip_next=yes;; \ | |||
| esac; \ | |||
| case $$flg in \ | |||
| *$$target_option*) has_opt=yes; break;; \ | |||
| esac; \ | |||
| done; \ | |||
| test $$has_opt = yes | |||
| am__make_dryrun = (target_option=n; $(am__make_running_with_option)) | |||
| am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) | |||
| pkgdatadir = $(datadir)/@PACKAGE@ | |||
| pkgincludedir = $(includedir)/@PACKAGE@ | |||
| pkglibdir = $(libdir)/@PACKAGE@ | |||
| pkglibexecdir = $(libexecdir)/@PACKAGE@ | |||
| am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd | |||
| install_sh_DATA = $(install_sh) -c -m 644 | |||
| install_sh_PROGRAM = $(install_sh) -c | |||
| install_sh_SCRIPT = $(install_sh) -c | |||
| INSTALL_HEADER = $(INSTALL_DATA) | |||
| transform = $(program_transform_name) | |||
| NORMAL_INSTALL = : | |||
| PRE_INSTALL = : | |||
| POST_INSTALL = : | |||
| NORMAL_UNINSTALL = : | |||
| PRE_UNINSTALL = : | |||
| POST_UNINSTALL = : | |||
| subdir = . | |||
| ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 | |||
| am__aclocal_m4_deps = $(top_srcdir)/configure.ac | |||
| am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ | |||
| $(ACLOCAL_M4) | |||
| DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ | |||
| $(am__configure_deps) $(am__DIST_COMMON) | |||
| am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ | |||
| configure.lineno config.status.lineno | |||
| mkinstalldirs = $(install_sh) -d | |||
| CONFIG_HEADER = config.h | |||
| CONFIG_CLEAN_FILES = | |||
| CONFIG_CLEAN_VPATH_FILES = | |||
| AM_V_P = $(am__v_P_@AM_V@) | |||
| am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) | |||
| am__v_P_0 = false | |||
| am__v_P_1 = : | |||
| AM_V_GEN = $(am__v_GEN_@AM_V@) | |||
| am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) | |||
| am__v_GEN_0 = @echo " GEN " $@; | |||
| am__v_GEN_1 = | |||
| AM_V_at = $(am__v_at_@AM_V@) | |||
| am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) | |||
| am__v_at_0 = @ | |||
| am__v_at_1 = | |||
| SOURCES = | |||
| DIST_SOURCES = | |||
| RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ | |||
| ctags-recursive dvi-recursive html-recursive info-recursive \ | |||
| install-data-recursive install-dvi-recursive \ | |||
| install-exec-recursive install-html-recursive \ | |||
| install-info-recursive install-pdf-recursive \ | |||
| install-ps-recursive install-recursive installcheck-recursive \ | |||
| installdirs-recursive pdf-recursive ps-recursive \ | |||
| tags-recursive uninstall-recursive | |||
| am__can_run_installinfo = \ | |||
| case $$AM_UPDATE_INFO_DIR in \ | |||
| n|no|NO) false;; \ | |||
| *) (install-info --version) >/dev/null 2>&1;; \ | |||
| esac | |||
| RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ | |||
| distclean-recursive maintainer-clean-recursive | |||
| am__recursive_targets = \ | |||
| $(RECURSIVE_TARGETS) \ | |||
| $(RECURSIVE_CLEAN_TARGETS) \ | |||
| $(am__extra_recursive_targets) | |||
| AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ | |||
| cscope distdir distdir-am dist dist-all distcheck | |||
| am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ | |||
| $(LISP)config.h.in | |||
| # Read a list of newline-separated strings from the standard input, | |||
| # and print each of them once, without duplicates. Input order is | |||
| # *not* preserved. | |||
| am__uniquify_input = $(AWK) '\ | |||
| BEGIN { nonempty = 0; } \ | |||
| { items[$$0] = 1; nonempty = 1; } \ | |||
| END { if (nonempty) { for (i in items) print i; }; } \ | |||
| ' | |||
| # Make sure the list of sources is unique. This is necessary because, | |||
| # e.g., the same source file might be shared among _SOURCES variables | |||
| # for different programs/libraries. | |||
| am__define_uniq_tagged_files = \ | |||
| list='$(am__tagged_files)'; \ | |||
| unique=`for i in $$list; do \ | |||
| if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ | |||
| done | $(am__uniquify_input)` | |||
| ETAGS = etags | |||
| CTAGS = ctags | |||
| CSCOPE = cscope | |||
| DIST_SUBDIRS = $(SUBDIRS) | |||
| am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in AUTHORS \ | |||
| COPYING ChangeLog INSTALL NEWS README compile depcomp \ | |||
| install-sh missing | |||
| DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) | |||
| distdir = $(PACKAGE)-$(VERSION) | |||
| top_distdir = $(distdir) | |||
| am__remove_distdir = \ | |||
| if test -d "$(distdir)"; then \ | |||
| find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ | |||
| && rm -rf "$(distdir)" \ | |||
| || { sleep 5 && rm -rf "$(distdir)"; }; \ | |||
| else :; fi | |||
| am__post_remove_distdir = $(am__remove_distdir) | |||
| am__relativize = \ | |||
| dir0=`pwd`; \ | |||
| sed_first='s,^\([^/]*\)/.*$$,\1,'; \ | |||
| sed_rest='s,^[^/]*/*,,'; \ | |||
| sed_last='s,^.*/\([^/]*\)$$,\1,'; \ | |||
| sed_butlast='s,/*[^/]*$$,,'; \ | |||
| while test -n "$$dir1"; do \ | |||
| first=`echo "$$dir1" | sed -e "$$sed_first"`; \ | |||
| if test "$$first" != "."; then \ | |||
| if test "$$first" = ".."; then \ | |||
| dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ | |||
| dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ | |||
| else \ | |||
| first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ | |||
| if test "$$first2" = "$$first"; then \ | |||
| dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ | |||
| else \ | |||
| dir2="../$$dir2"; \ | |||
| fi; \ | |||
| dir0="$$dir0"/"$$first"; \ | |||
| fi; \ | |||
| fi; \ | |||
| dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ | |||
| done; \ | |||
| reldir="$$dir2" | |||
| DIST_ARCHIVES = $(distdir).tar.gz | |||
| GZIP_ENV = --best | |||
| DIST_TARGETS = dist-gzip | |||
| distuninstallcheck_listfiles = find . -type f -print | |||
| am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | |||
| | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' | |||
| distcleancheck_listfiles = find . -type f -print | |||
| ACLOCAL = @ACLOCAL@ | |||
| ADMCOM = @ADMCOM@ | |||
| ADMCOM2 = @ADMCOM2@ | |||
| ADMCOM3 = @ADMCOM3@ | |||
| ADMCOM4 = @ADMCOM4@ | |||
| AMTAR = @AMTAR@ | |||
| AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ | |||
| AUTOCONF = @AUTOCONF@ | |||
| AUTOHEADER = @AUTOHEADER@ | |||
| AUTOMAKE = @AUTOMAKE@ | |||
| AWK = @AWK@ | |||
| CC = @CC@ | |||
| CCDEPMODE = @CCDEPMODE@ | |||
| CFLAGS = @CFLAGS@ | |||
| COM1 = @COM1@ | |||
| COM2 = @COM2@ | |||
| COM3 = @COM3@ | |||
| CPP = @CPP@ | |||
| CPPFLAGS = @CPPFLAGS@ | |||
| CYGPATH_W = @CYGPATH_W@ | |||
| DEFS = @DEFS@ | |||
| DEPDIR = @DEPDIR@ | |||
| ECHO_C = @ECHO_C@ | |||
| ECHO_N = @ECHO_N@ | |||
| ECHO_T = @ECHO_T@ | |||
| EGREP = @EGREP@ | |||
| EXEEXT = @EXEEXT@ | |||
| GREP = @GREP@ | |||
| INSTALL = @INSTALL@ | |||
| INSTALL_DATA = @INSTALL_DATA@ | |||
| INSTALL_PROGRAM = @INSTALL_PROGRAM@ | |||
| INSTALL_SCRIPT = @INSTALL_SCRIPT@ | |||
| INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ | |||
| LDFLAGS = @LDFLAGS@ | |||
| LIBOBJS = @LIBOBJS@ | |||
| LIBS = @LIBS@ | |||
| LTLIBOBJS = @LTLIBOBJS@ | |||
| MAKEINFO = @MAKEINFO@ | |||
| MKDIR_P = @MKDIR_P@ | |||
| OBJEXT = @OBJEXT@ | |||
| PACKAGE = @PACKAGE@ | |||
| PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ | |||
| PACKAGE_NAME = @PACKAGE_NAME@ | |||
| PACKAGE_STRING = @PACKAGE_STRING@ | |||
| PACKAGE_TARNAME = @PACKAGE_TARNAME@ | |||
| PACKAGE_URL = @PACKAGE_URL@ | |||
| PACKAGE_VERSION = @PACKAGE_VERSION@ | |||
| PATH_SEPARATOR = @PATH_SEPARATOR@ | |||
| SED = @SED@ | |||
| SET_MAKE = @SET_MAKE@ | |||
| SHELL = @SHELL@ | |||
| STRIP = @STRIP@ | |||
| VERSION = @VERSION@ | |||
| abs_builddir = @abs_builddir@ | |||
| abs_srcdir = @abs_srcdir@ | |||
| abs_top_builddir = @abs_top_builddir@ | |||
| abs_top_srcdir = @abs_top_srcdir@ | |||
| ac_ct_CC = @ac_ct_CC@ | |||
| am__include = @am__include@ | |||
| am__leading_dot = @am__leading_dot@ | |||
| am__quote = @am__quote@ | |||
| am__tar = @am__tar@ | |||
| am__untar = @am__untar@ | |||
| bindir = @bindir@ | |||
| build_alias = @build_alias@ | |||
| builddir = @builddir@ | |||
| datadir = @datadir@ | |||
| datarootdir = @datarootdir@ | |||
| docdir = @docdir@ | |||
| dvidir = @dvidir@ | |||
| exec_prefix = @exec_prefix@ | |||
| host_alias = @host_alias@ | |||
| htmldir = @htmldir@ | |||
| includedir = @includedir@ | |||
| infodir = @infodir@ | |||
| install_sh = @install_sh@ | |||
| libdir = @libdir@ | |||
| libexecdir = @libexecdir@ | |||
| localedir = @localedir@ | |||
| localstatedir = @localstatedir@ | |||
| mandir = @mandir@ | |||
| mkdir_p = @mkdir_p@ | |||
| oldincludedir = @oldincludedir@ | |||
| pdfdir = @pdfdir@ | |||
| prefix = @prefix@ | |||
| program_transform_name = @program_transform_name@ | |||
| psdir = @psdir@ | |||
| runstatedir = @runstatedir@ | |||
| sbindir = @sbindir@ | |||
| sharedstatedir = @sharedstatedir@ | |||
| srcdir = @srcdir@ | |||
| sysconfdir = @sysconfdir@ | |||
| target_alias = @target_alias@ | |||
| top_build_prefix = @top_build_prefix@ | |||
| top_builddir = @top_builddir@ | |||
| top_srcdir = @top_srcdir@ | |||
| EXTRA_DIST = src/regles.txt | |||
| SUBDIRS = src | |||
| all: config.h | |||
| $(MAKE) $(AM_MAKEFLAGS) all-recursive | |||
| .SUFFIXES: | |||
| am--refresh: Makefile | |||
| @: | |||
| $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) | |||
| @for dep in $?; do \ | |||
| case '$(am__configure_deps)' in \ | |||
| *$$dep*) \ | |||
| echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ | |||
| $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ | |||
| && exit 0; \ | |||
| exit 1;; \ | |||
| esac; \ | |||
| done; \ | |||
| echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ | |||
| $(am__cd) $(top_srcdir) && \ | |||
| $(AUTOMAKE) --gnu Makefile | |||
| Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status | |||
| @case '$?' in \ | |||
| *config.status*) \ | |||
| echo ' $(SHELL) ./config.status'; \ | |||
| $(SHELL) ./config.status;; \ | |||
| *) \ | |||
| echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles)'; \ | |||
| cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \ | |||
| esac; | |||
| $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) | |||
| $(SHELL) ./config.status --recheck | |||
| $(top_srcdir)/configure: $(am__configure_deps) | |||
| $(am__cd) $(srcdir) && $(AUTOCONF) | |||
| $(ACLOCAL_M4): $(am__aclocal_m4_deps) | |||
| $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) | |||
| $(am__aclocal_m4_deps): | |||
| config.h: stamp-h1 | |||
| @test -f $@ || rm -f stamp-h1 | |||
| @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 | |||
| stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status | |||
| @rm -f stamp-h1 | |||
| cd $(top_builddir) && $(SHELL) ./config.status config.h | |||
| $(srcdir)/config.h.in: $(am__configure_deps) | |||
| ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) | |||
| rm -f stamp-h1 | |||
| touch $@ | |||
| distclean-hdr: | |||
| -rm -f config.h stamp-h1 | |||
| # This directory's subdirectories are mostly independent; you can cd | |||
| # into them and run 'make' without going through this Makefile. | |||
| # To change the values of 'make' variables: instead of editing Makefiles, | |||
| # (1) if the variable is set in 'config.status', edit 'config.status' | |||
| # (which will cause the Makefiles to be regenerated when you run 'make'); | |||
| # (2) otherwise, pass the desired values on the 'make' command line. | |||
| $(am__recursive_targets): | |||
| @fail=; \ | |||
| if $(am__make_keepgoing); then \ | |||
| failcom='fail=yes'; \ | |||
| else \ | |||
| failcom='exit 1'; \ | |||
| fi; \ | |||
| dot_seen=no; \ | |||
| target=`echo $@ | sed s/-recursive//`; \ | |||
| case "$@" in \ | |||
| distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ | |||
| *) list='$(SUBDIRS)' ;; \ | |||
| esac; \ | |||
| for subdir in $$list; do \ | |||
| echo "Making $$target in $$subdir"; \ | |||
| if test "$$subdir" = "."; then \ | |||
| dot_seen=yes; \ | |||
| local_target="$$target-am"; \ | |||
| else \ | |||
| local_target="$$target"; \ | |||
| fi; \ | |||
| ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ | |||
| || eval $$failcom; \ | |||
| done; \ | |||
| if test "$$dot_seen" = "no"; then \ | |||
| $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ | |||
| fi; test -z "$$fail" | |||
| ID: $(am__tagged_files) | |||
| $(am__define_uniq_tagged_files); mkid -fID $$unique | |||
| tags: tags-recursive | |||
| TAGS: tags | |||
| tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) | |||
| set x; \ | |||
| here=`pwd`; \ | |||
| if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ | |||
| include_option=--etags-include; \ | |||
| empty_fix=.; \ | |||
| else \ | |||
| include_option=--include; \ | |||
| empty_fix=; \ | |||
| fi; \ | |||
| list='$(SUBDIRS)'; for subdir in $$list; do \ | |||
| if test "$$subdir" = .; then :; else \ | |||
| test ! -f $$subdir/TAGS || \ | |||
| set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ | |||
| fi; \ | |||
| done; \ | |||
| $(am__define_uniq_tagged_files); \ | |||
| shift; \ | |||
| if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ | |||
| test -n "$$unique" || unique=$$empty_fix; \ | |||
| if test $$# -gt 0; then \ | |||
| $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ | |||
| "$$@" $$unique; \ | |||
| else \ | |||
| $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ | |||
| $$unique; \ | |||
| fi; \ | |||
| fi | |||
| ctags: ctags-recursive | |||
| CTAGS: ctags | |||
| ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) | |||
| $(am__define_uniq_tagged_files); \ | |||
| test -z "$(CTAGS_ARGS)$$unique" \ | |||
| || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ | |||
| $$unique | |||
| GTAGS: | |||
| here=`$(am__cd) $(top_builddir) && pwd` \ | |||
| && $(am__cd) $(top_srcdir) \ | |||
| && gtags -i $(GTAGS_ARGS) "$$here" | |||
| cscope: cscope.files | |||
| test ! -s cscope.files \ | |||
| || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) | |||
| clean-cscope: | |||
| -rm -f cscope.files | |||
| cscope.files: clean-cscope cscopelist | |||
| cscopelist: cscopelist-recursive | |||
| cscopelist-am: $(am__tagged_files) | |||
| list='$(am__tagged_files)'; \ | |||
| case "$(srcdir)" in \ | |||
| [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ | |||
| *) sdir=$(subdir)/$(srcdir) ;; \ | |||
| esac; \ | |||
| for i in $$list; do \ | |||
| if test -f "$$i"; then \ | |||
| echo "$(subdir)/$$i"; \ | |||
| else \ | |||
| echo "$$sdir/$$i"; \ | |||
| fi; \ | |||
| done >> $(top_builddir)/cscope.files | |||
| distclean-tags: | |||
| -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags | |||
| -rm -f cscope.out cscope.in.out cscope.po.out cscope.files | |||
| distdir: $(BUILT_SOURCES) | |||
| $(MAKE) $(AM_MAKEFLAGS) distdir-am | |||
| distdir-am: $(DISTFILES) | |||
| $(am__remove_distdir) | |||
| test -d "$(distdir)" || mkdir "$(distdir)" | |||
| @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ | |||
| topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ | |||
| list='$(DISTFILES)'; \ | |||
| dist_files=`for file in $$list; do echo $$file; done | \ | |||
| sed -e "s|^$$srcdirstrip/||;t" \ | |||
| -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ | |||
| case $$dist_files in \ | |||
| */*) $(MKDIR_P) `echo "$$dist_files" | \ | |||
| sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ | |||
| sort -u` ;; \ | |||
| esac; \ | |||
| for file in $$dist_files; do \ | |||
| if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ | |||
| if test -d $$d/$$file; then \ | |||
| dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ | |||
| if test -d "$(distdir)/$$file"; then \ | |||
| find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ | |||
| fi; \ | |||
| if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ | |||
| cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ | |||
| find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ | |||
| fi; \ | |||
| cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ | |||
| else \ | |||
| test -f "$(distdir)/$$file" \ | |||
| || cp -p $$d/$$file "$(distdir)/$$file" \ | |||
| || exit 1; \ | |||
| fi; \ | |||
| done | |||
| @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ | |||
| if test "$$subdir" = .; then :; else \ | |||
| $(am__make_dryrun) \ | |||
| || test -d "$(distdir)/$$subdir" \ | |||
| || $(MKDIR_P) "$(distdir)/$$subdir" \ | |||
| || exit 1; \ | |||
| dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ | |||
| $(am__relativize); \ | |||
| new_distdir=$$reldir; \ | |||
| dir1=$$subdir; dir2="$(top_distdir)"; \ | |||
| $(am__relativize); \ | |||
| new_top_distdir=$$reldir; \ | |||
| echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ | |||
| echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ | |||
| ($(am__cd) $$subdir && \ | |||
| $(MAKE) $(AM_MAKEFLAGS) \ | |||
| top_distdir="$$new_top_distdir" \ | |||
| distdir="$$new_distdir" \ | |||
| am__remove_distdir=: \ | |||
| am__skip_length_check=: \ | |||
| am__skip_mode_fix=: \ | |||
| distdir) \ | |||
| || exit 1; \ | |||
| fi; \ | |||
| done | |||
| -test -n "$(am__skip_mode_fix)" \ | |||
| || find "$(distdir)" -type d ! -perm -755 \ | |||
| -exec chmod u+rwx,go+rx {} \; -o \ | |||
| ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ | |||
| ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ | |||
| ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ | |||
| || chmod -R a+r "$(distdir)" | |||
| dist-gzip: distdir | |||
| tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz | |||
| $(am__post_remove_distdir) | |||
| dist-bzip2: distdir | |||
| tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 | |||
| $(am__post_remove_distdir) | |||
| dist-lzip: distdir | |||
| tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz | |||
| $(am__post_remove_distdir) | |||
| dist-xz: distdir | |||
| tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz | |||
| $(am__post_remove_distdir) | |||
| dist-tarZ: distdir | |||
| @echo WARNING: "Support for distribution archives compressed with" \ | |||
| "legacy program 'compress' is deprecated." >&2 | |||
| @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 | |||
| tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z | |||
| $(am__post_remove_distdir) | |||
| dist-shar: distdir | |||
| @echo WARNING: "Support for shar distribution archives is" \ | |||
| "deprecated." >&2 | |||
| @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 | |||
| shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz | |||
| $(am__post_remove_distdir) | |||
| dist-zip: distdir | |||
| -rm -f $(distdir).zip | |||
| zip -rq $(distdir).zip $(distdir) | |||
| $(am__post_remove_distdir) | |||
| dist dist-all: | |||
| $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' | |||
| $(am__post_remove_distdir) | |||
| # This target untars the dist file and tries a VPATH configuration. Then | |||
| # it guarantees that the distribution is self-contained by making another | |||
| # tarfile. | |||
| distcheck: dist | |||
| case '$(DIST_ARCHIVES)' in \ | |||
| *.tar.gz*) \ | |||
| eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\ | |||
| *.tar.bz2*) \ | |||
| bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ | |||
| *.tar.lz*) \ | |||
| lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ | |||
| *.tar.xz*) \ | |||
| xz -dc $(distdir).tar.xz | $(am__untar) ;;\ | |||
| *.tar.Z*) \ | |||
| uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ | |||
| *.shar.gz*) \ | |||
| eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ | |||
| *.zip*) \ | |||
| unzip $(distdir).zip ;;\ | |||
| esac | |||
| chmod -R a-w $(distdir) | |||
| chmod u+w $(distdir) | |||
| mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst | |||
| chmod a-w $(distdir) | |||
| test -d $(distdir)/_build || exit 0; \ | |||
| dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ | |||
| && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ | |||
| && am__cwd=`pwd` \ | |||
| && $(am__cd) $(distdir)/_build/sub \ | |||
| && ../../configure \ | |||
| $(AM_DISTCHECK_CONFIGURE_FLAGS) \ | |||
| $(DISTCHECK_CONFIGURE_FLAGS) \ | |||
| --srcdir=../.. --prefix="$$dc_install_base" \ | |||
| && $(MAKE) $(AM_MAKEFLAGS) \ | |||
| && $(MAKE) $(AM_MAKEFLAGS) dvi \ | |||
| && $(MAKE) $(AM_MAKEFLAGS) check \ | |||
| && $(MAKE) $(AM_MAKEFLAGS) install \ | |||
| && $(MAKE) $(AM_MAKEFLAGS) installcheck \ | |||
| && $(MAKE) $(AM_MAKEFLAGS) uninstall \ | |||
| && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ | |||
| distuninstallcheck \ | |||
| && chmod -R a-w "$$dc_install_base" \ | |||
| && ({ \ | |||
| (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ | |||
| && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ | |||
| && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ | |||
| && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ | |||
| distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ | |||
| } || { rm -rf "$$dc_destdir"; exit 1; }) \ | |||
| && rm -rf "$$dc_destdir" \ | |||
| && $(MAKE) $(AM_MAKEFLAGS) dist \ | |||
| && rm -rf $(DIST_ARCHIVES) \ | |||
| && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ | |||
| && cd "$$am__cwd" \ | |||
| || exit 1 | |||
| $(am__post_remove_distdir) | |||
| @(echo "$(distdir) archives ready for distribution: "; \ | |||
| list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ | |||
| sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' | |||
| distuninstallcheck: | |||
| @test -n '$(distuninstallcheck_dir)' || { \ | |||
| echo 'ERROR: trying to run $@ with an empty' \ | |||
| '$$(distuninstallcheck_dir)' >&2; \ | |||
| exit 1; \ | |||
| }; \ | |||
| $(am__cd) '$(distuninstallcheck_dir)' || { \ | |||
| echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ | |||
| exit 1; \ | |||
| }; \ | |||
| test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ | |||
| || { echo "ERROR: files left after uninstall:" ; \ | |||
| if test -n "$(DESTDIR)"; then \ | |||
| echo " (check DESTDIR support)"; \ | |||
| fi ; \ | |||
| $(distuninstallcheck_listfiles) ; \ | |||
| exit 1; } >&2 | |||
| distcleancheck: distclean | |||
| @if test '$(srcdir)' = . ; then \ | |||
| echo "ERROR: distcleancheck can only run from a VPATH build" ; \ | |||
| exit 1 ; \ | |||
| fi | |||
| @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ | |||
| || { echo "ERROR: files left in build directory after distclean:" ; \ | |||
| $(distcleancheck_listfiles) ; \ | |||
| exit 1; } >&2 | |||
| check-am: all-am | |||
| check: check-recursive | |||
| all-am: Makefile config.h | |||
| installdirs: installdirs-recursive | |||
| installdirs-am: | |||
| install: install-recursive | |||
| install-exec: install-exec-recursive | |||
| install-data: install-data-recursive | |||
| uninstall: uninstall-recursive | |||
| install-am: all-am | |||
| @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am | |||
| installcheck: installcheck-recursive | |||
| install-strip: | |||
| if test -z '$(STRIP)'; then \ | |||
| $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ | |||
| install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ | |||
| install; \ | |||
| else \ | |||
| $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ | |||
| install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ | |||
| "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ | |||
| fi | |||
| mostlyclean-generic: | |||
| clean-generic: | |||
| distclean-generic: | |||
| -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) | |||
| -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) | |||
| maintainer-clean-generic: | |||
| @echo "This command is intended for maintainers to use" | |||
| @echo "it deletes files that may require special tools to rebuild." | |||
| clean: clean-recursive | |||
| clean-am: clean-generic mostlyclean-am | |||
| distclean: distclean-recursive | |||
| -rm -f $(am__CONFIG_DISTCLEAN_FILES) | |||
| -rm -f Makefile | |||
| distclean-am: clean-am distclean-generic distclean-hdr distclean-tags | |||
| dvi: dvi-recursive | |||
| dvi-am: | |||
| html: html-recursive | |||
| html-am: | |||
| info: info-recursive | |||
| info-am: | |||
| install-data-am: | |||
| install-dvi: install-dvi-recursive | |||
| install-dvi-am: | |||
| install-exec-am: | |||
| install-html: install-html-recursive | |||
| install-html-am: | |||
| install-info: install-info-recursive | |||
| install-info-am: | |||
| install-man: | |||
| install-pdf: install-pdf-recursive | |||
| install-pdf-am: | |||
| install-ps: install-ps-recursive | |||
| install-ps-am: | |||
| installcheck-am: | |||
| maintainer-clean: maintainer-clean-recursive | |||
| -rm -f $(am__CONFIG_DISTCLEAN_FILES) | |||
| -rm -rf $(top_srcdir)/autom4te.cache | |||
| -rm -f Makefile | |||
| maintainer-clean-am: distclean-am maintainer-clean-generic | |||
| mostlyclean: mostlyclean-recursive | |||
| mostlyclean-am: mostlyclean-generic | |||
| pdf: pdf-recursive | |||
| pdf-am: | |||
| ps: ps-recursive | |||
| ps-am: | |||
| uninstall-am: | |||
| .MAKE: $(am__recursive_targets) all install-am install-strip | |||
| .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ | |||
| am--refresh check check-am clean clean-cscope clean-generic \ | |||
| cscope cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \ | |||
| dist-gzip dist-lzip dist-shar dist-tarZ dist-xz dist-zip \ | |||
| distcheck distclean distclean-generic distclean-hdr \ | |||
| distclean-tags distcleancheck distdir distuninstallcheck dvi \ | |||
| dvi-am html html-am info info-am install install-am \ | |||
| install-data install-data-am install-dvi install-dvi-am \ | |||
| install-exec install-exec-am install-html install-html-am \ | |||
| install-info install-info-am install-man install-pdf \ | |||
| install-pdf-am install-ps install-ps-am install-strip \ | |||
| installcheck installcheck-am installdirs installdirs-am \ | |||
| maintainer-clean maintainer-clean-generic mostlyclean \ | |||
| mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ | |||
| uninstall-am | |||
| .PRECIOUS: Makefile | |||
| # Tell versions [3.59,3.63) of GNU make to not export all variables. | |||
| # Otherwise a system limit (for SysV at least) may be exceeded. | |||
| .NOEXPORT: | |||
| @@ -0,0 +1,4 @@ | |||
| History of Septime releases : | |||
| 2024-10-25 - Septime 1.00 the first public release on githell.e2li.org. | |||
| @@ -0,0 +1,72 @@ | |||
| Septime - an enhanced version of Octave, currently under development. | |||
| Overview | |||
| ======== | |||
| This project is part of the E2L Prosecco project. | |||
| All details on : | |||
| https://www.e2li.org/ProjetProsecco.html | |||
| Septime is an application to protect against unwanted connections. | |||
| The name of the application comes from fencing. In this noble sport, | |||
| parries named after the position in which the hand is held, and there | |||
| are eight parries : prime, seconde, tierce, quarte, quinte, sixte, | |||
| septime and octave. | |||
| The octave and septime are especially useful for warding off low blows! :-) | |||
| And what could be baser than taking advantage of people's ignorance to spy | |||
| on them and steal their data? | |||
| But octave is also GNU software (see https://octave.org ). | |||
| So we'll be using septime in future versions. | |||
| How to compile and install septime | |||
| ================================== | |||
| Download the septime source code with git : | |||
| $ git clone https://githell.e2li.org/Patrick/Kouglof2.git | |||
| $ cd Kouglof2/Septime | |||
| or donwload a tar.gz file and : | |||
| $ tar xvzf septime-x.y.z.tar.gz | |||
| $ cd septime-x.y.z | |||
| First install some necessary packages : | |||
| # in Linux using apt commands : | |||
| $ sudo apt install libreadline-dev | |||
| $ sudo apt install zlib1g-dev | |||
| # in Linux using yum and rmp commands : | |||
| $ sudo yum install readline-devel | |||
| $ sudo yum install zlib-devel | |||
| Second configure and build the program : | |||
| $ ./configure | |||
| $ make | |||
| You can use it by positionning in the source directory and call the | |||
| command : | |||
| $ cd src | |||
| $ ./septime -til -p regles.txt | |||
| WARNING !! | |||
| make install is possible but not preconized in test version !! | |||
| But if you still want to install, don't forget to copy the regles.txt file | |||
| to /etc/septime.cfg to avoid passing the file name with the -p option. | |||
| Web Page | |||
| ======== | |||
| https://www.e2li.org/ProjetProsecco.html | |||
| Bug Reports | |||
| =========== | |||
| For general bug reports, send a description of the problem to | |||
| septime@e2li.org. | |||
| Current Status | |||
| ============== | |||
| septime is in test version. | |||
| We are working on porting this application to other consumer systems | |||
| such as Android, MasOsX, Windows, ... | |||
| Patrick Foubet (septime@e2li.org) | |||
| @@ -0,0 +1,348 @@ | |||
| #! /bin/sh | |||
| # Wrapper for compilers which do not understand '-c -o'. | |||
| scriptversion=2018-03-07.03; # UTC | |||
| # Copyright (C) 1999-2018 Free Software Foundation, Inc. | |||
| # Written by Tom Tromey <tromey@cygnus.com>. | |||
| # | |||
| # This program is free software; you can redistribute it and/or modify | |||
| # it under the terms of the GNU General Public License as published by | |||
| # the Free Software Foundation; either version 2, or (at your option) | |||
| # any later version. | |||
| # | |||
| # This program is distributed in the hope that it will be useful, | |||
| # but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
| # GNU General Public License for more details. | |||
| # | |||
| # You should have received a copy of the GNU General Public License | |||
| # along with this program. If not, see <https://www.gnu.org/licenses/>. | |||
| # As a special exception to the GNU General Public License, if you | |||
| # distribute this file as part of a program that contains a | |||
| # configuration script generated by Autoconf, you may include it under | |||
| # the same distribution terms that you use for the rest of that program. | |||
| # This file is maintained in Automake, please report | |||
| # bugs to <bug-automake@gnu.org> or send patches to | |||
| # <automake-patches@gnu.org>. | |||
| nl=' | |||
| ' | |||
| # We need space, tab and new line, in precisely that order. Quoting is | |||
| # there to prevent tools from complaining about whitespace usage. | |||
| IFS=" "" $nl" | |||
| file_conv= | |||
| # func_file_conv build_file lazy | |||
| # Convert a $build file to $host form and store it in $file | |||
| # Currently only supports Windows hosts. If the determined conversion | |||
| # type is listed in (the comma separated) LAZY, no conversion will | |||
| # take place. | |||
| func_file_conv () | |||
| { | |||
| file=$1 | |||
| case $file in | |||
| / | /[!/]*) # absolute file, and not a UNC file | |||
| if test -z "$file_conv"; then | |||
| # lazily determine how to convert abs files | |||
| case `uname -s` in | |||
| MINGW*) | |||
| file_conv=mingw | |||
| ;; | |||
| CYGWIN*) | |||
| file_conv=cygwin | |||
| ;; | |||
| *) | |||
| file_conv=wine | |||
| ;; | |||
| esac | |||
| fi | |||
| case $file_conv/,$2, in | |||
| *,$file_conv,*) | |||
| ;; | |||
| mingw/*) | |||
| file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` | |||
| ;; | |||
| cygwin/*) | |||
| file=`cygpath -m "$file" || echo "$file"` | |||
| ;; | |||
| wine/*) | |||
| file=`winepath -w "$file" || echo "$file"` | |||
| ;; | |||
| esac | |||
| ;; | |||
| esac | |||
| } | |||
| # func_cl_dashL linkdir | |||
| # Make cl look for libraries in LINKDIR | |||
| func_cl_dashL () | |||
| { | |||
| func_file_conv "$1" | |||
| if test -z "$lib_path"; then | |||
| lib_path=$file | |||
| else | |||
| lib_path="$lib_path;$file" | |||
| fi | |||
| linker_opts="$linker_opts -LIBPATH:$file" | |||
| } | |||
| # func_cl_dashl library | |||
| # Do a library search-path lookup for cl | |||
| func_cl_dashl () | |||
| { | |||
| lib=$1 | |||
| found=no | |||
| save_IFS=$IFS | |||
| IFS=';' | |||
| for dir in $lib_path $LIB | |||
| do | |||
| IFS=$save_IFS | |||
| if $shared && test -f "$dir/$lib.dll.lib"; then | |||
| found=yes | |||
| lib=$dir/$lib.dll.lib | |||
| break | |||
| fi | |||
| if test -f "$dir/$lib.lib"; then | |||
| found=yes | |||
| lib=$dir/$lib.lib | |||
| break | |||
| fi | |||
| if test -f "$dir/lib$lib.a"; then | |||
| found=yes | |||
| lib=$dir/lib$lib.a | |||
| break | |||
| fi | |||
| done | |||
| IFS=$save_IFS | |||
| if test "$found" != yes; then | |||
| lib=$lib.lib | |||
| fi | |||
| } | |||
| # func_cl_wrapper cl arg... | |||
| # Adjust compile command to suit cl | |||
| func_cl_wrapper () | |||
| { | |||
| # Assume a capable shell | |||
| lib_path= | |||
| shared=: | |||
| linker_opts= | |||
| for arg | |||
| do | |||
| if test -n "$eat"; then | |||
| eat= | |||
| else | |||
| case $1 in | |||
| -o) | |||
| # configure might choose to run compile as 'compile cc -o foo foo.c'. | |||
| eat=1 | |||
| case $2 in | |||
| *.o | *.[oO][bB][jJ]) | |||
| func_file_conv "$2" | |||
| set x "$@" -Fo"$file" | |||
| shift | |||
| ;; | |||
| *) | |||
| func_file_conv "$2" | |||
| set x "$@" -Fe"$file" | |||
| shift | |||
| ;; | |||
| esac | |||
| ;; | |||
| -I) | |||
| eat=1 | |||
| func_file_conv "$2" mingw | |||
| set x "$@" -I"$file" | |||
| shift | |||
| ;; | |||
| -I*) | |||
| func_file_conv "${1#-I}" mingw | |||
| set x "$@" -I"$file" | |||
| shift | |||
| ;; | |||
| -l) | |||
| eat=1 | |||
| func_cl_dashl "$2" | |||
| set x "$@" "$lib" | |||
| shift | |||
| ;; | |||
| -l*) | |||
| func_cl_dashl "${1#-l}" | |||
| set x "$@" "$lib" | |||
| shift | |||
| ;; | |||
| -L) | |||
| eat=1 | |||
| func_cl_dashL "$2" | |||
| ;; | |||
| -L*) | |||
| func_cl_dashL "${1#-L}" | |||
| ;; | |||
| -static) | |||
| shared=false | |||
| ;; | |||
| -Wl,*) | |||
| arg=${1#-Wl,} | |||
| save_ifs="$IFS"; IFS=',' | |||
| for flag in $arg; do | |||
| IFS="$save_ifs" | |||
| linker_opts="$linker_opts $flag" | |||
| done | |||
| IFS="$save_ifs" | |||
| ;; | |||
| -Xlinker) | |||
| eat=1 | |||
| linker_opts="$linker_opts $2" | |||
| ;; | |||
| -*) | |||
| set x "$@" "$1" | |||
| shift | |||
| ;; | |||
| *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) | |||
| func_file_conv "$1" | |||
| set x "$@" -Tp"$file" | |||
| shift | |||
| ;; | |||
| *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) | |||
| func_file_conv "$1" mingw | |||
| set x "$@" "$file" | |||
| shift | |||
| ;; | |||
| *) | |||
| set x "$@" "$1" | |||
| shift | |||
| ;; | |||
| esac | |||
| fi | |||
| shift | |||
| done | |||
| if test -n "$linker_opts"; then | |||
| linker_opts="-link$linker_opts" | |||
| fi | |||
| exec "$@" $linker_opts | |||
| exit 1 | |||
| } | |||
| eat= | |||
| case $1 in | |||
| '') | |||
| echo "$0: No command. Try '$0 --help' for more information." 1>&2 | |||
| exit 1; | |||
| ;; | |||
| -h | --h*) | |||
| cat <<\EOF | |||
| Usage: compile [--help] [--version] PROGRAM [ARGS] | |||
| Wrapper for compilers which do not understand '-c -o'. | |||
| Remove '-o dest.o' from ARGS, run PROGRAM with the remaining | |||
| arguments, and rename the output as expected. | |||
| If you are trying to build a whole package this is not the | |||
| right script to run: please start by reading the file 'INSTALL'. | |||
| Report bugs to <bug-automake@gnu.org>. | |||
| EOF | |||
| exit $? | |||
| ;; | |||
| -v | --v*) | |||
| echo "compile $scriptversion" | |||
| exit $? | |||
| ;; | |||
| cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \ | |||
| icl | *[/\\]icl | icl.exe | *[/\\]icl.exe ) | |||
| func_cl_wrapper "$@" # Doesn't return... | |||
| ;; | |||
| esac | |||
| ofile= | |||
| cfile= | |||
| for arg | |||
| do | |||
| if test -n "$eat"; then | |||
| eat= | |||
| else | |||
| case $1 in | |||
| -o) | |||
| # configure might choose to run compile as 'compile cc -o foo foo.c'. | |||
| # So we strip '-o arg' only if arg is an object. | |||
| eat=1 | |||
| case $2 in | |||
| *.o | *.obj) | |||
| ofile=$2 | |||
| ;; | |||
| *) | |||
| set x "$@" -o "$2" | |||
| shift | |||
| ;; | |||
| esac | |||
| ;; | |||
| *.c) | |||
| cfile=$1 | |||
| set x "$@" "$1" | |||
| shift | |||
| ;; | |||
| *) | |||
| set x "$@" "$1" | |||
| shift | |||
| ;; | |||
| esac | |||
| fi | |||
| shift | |||
| done | |||
| if test -z "$ofile" || test -z "$cfile"; then | |||
| # If no '-o' option was seen then we might have been invoked from a | |||
| # pattern rule where we don't need one. That is ok -- this is a | |||
| # normal compilation that the losing compiler can handle. If no | |||
| # '.c' file was seen then we are probably linking. That is also | |||
| # ok. | |||
| exec "$@" | |||
| fi | |||
| # Name of file we expect compiler to create. | |||
| cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` | |||
| # Create the lock directory. | |||
| # Note: use '[/\\:.-]' here to ensure that we don't use the same name | |||
| # that we are using for the .o file. Also, base the name on the expected | |||
| # object file name, since that is what matters with a parallel build. | |||
| lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d | |||
| while true; do | |||
| if mkdir "$lockdir" >/dev/null 2>&1; then | |||
| break | |||
| fi | |||
| sleep 1 | |||
| done | |||
| # FIXME: race condition here if user kills between mkdir and trap. | |||
| trap "rmdir '$lockdir'; exit 1" 1 2 15 | |||
| # Run the compile. | |||
| "$@" | |||
| ret=$? | |||
| if test -f "$cofile"; then | |||
| test "$cofile" = "$ofile" || mv "$cofile" "$ofile" | |||
| elif test -f "${cofile}bj"; then | |||
| test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" | |||
| fi | |||
| rmdir "$lockdir" | |||
| exit $ret | |||
| # Local Variables: | |||
| # mode: shell-script | |||
| # sh-indentation: 2 | |||
| # eval: (add-hook 'before-save-hook 'time-stamp) | |||
| # time-stamp-start: "scriptversion=" | |||
| # time-stamp-format: "%:y-%02m-%02d.%02H" | |||
| # time-stamp-time-zone: "UTC0" | |||
| # time-stamp-end: "; # UTC" | |||
| # End: | |||
| @@ -0,0 +1,146 @@ | |||
| /* config.h.in. Generated from configure.ac by autoheader. */ | |||
| /* Define to 1 if you have the <arpa/inet.h> header file. */ | |||
| #undef HAVE_ARPA_INET_H | |||
| /* Define to 1 if you have the `dup2' function. */ | |||
| #undef HAVE_DUP2 | |||
| /* Define to 1 if you have the <fcntl.h> header file. */ | |||
| #undef HAVE_FCNTL_H | |||
| /* Define to 1 if you have the `fork' function. */ | |||
| #undef HAVE_FORK | |||
| /* Define to 1 if you have the <inttypes.h> header file. */ | |||
| #undef HAVE_INTTYPES_H | |||
| /* Define to 1 if you have the `pthread' library (-lpthread). */ | |||
| #undef HAVE_LIBPTHREAD | |||
| /* Define to 1 if you have the `readline' library (-lreadline). */ | |||
| #undef HAVE_LIBREADLINE | |||
| /* Define to 1 if you have the `z' library (-lz). */ | |||
| #undef HAVE_LIBZ | |||
| /* Define to 1 if your system has a GNU libc compatible `malloc' function, and | |||
| to 0 otherwise. */ | |||
| #undef HAVE_MALLOC | |||
| /* Define to 1 if you have the `memmove' function. */ | |||
| #undef HAVE_MEMMOVE | |||
| /* Define to 1 if you have the <memory.h> header file. */ | |||
| #undef HAVE_MEMORY_H | |||
| /* Define to 1 if you have the <pthread.h> header file. */ | |||
| #undef HAVE_PTHREAD_H | |||
| /* Define to 1 if you have the <readline/history.h> header file. */ | |||
| #undef HAVE_READLINE_HISTORY_H | |||
| /* Define to 1 if you have the <readline/readline.h> header file. */ | |||
| #undef HAVE_READLINE_READLINE_H | |||
| /* Define to 1 if you have the <stdint.h> header file. */ | |||
| #undef HAVE_STDINT_H | |||
| /* Define to 1 if you have the <stdlib.h> header file. */ | |||
| #undef HAVE_STDLIB_H | |||
| /* Define to 1 if you have the `strchr' function. */ | |||
| #undef HAVE_STRCHR | |||
| /* Define to 1 if you have the `strdup' function. */ | |||
| #undef HAVE_STRDUP | |||
| /* Define to 1 if you have the <strings.h> header file. */ | |||
| #undef HAVE_STRINGS_H | |||
| /* Define to 1 if you have the <string.h> header file. */ | |||
| #undef HAVE_STRING_H | |||
| /* Define to 1 if you have the `strrchr' function. */ | |||
| #undef HAVE_STRRCHR | |||
| /* Define to 1 if you have the `strstr' function. */ | |||
| #undef HAVE_STRSTR | |||
| /* Define to 1 if you have the <syslog.h> header file. */ | |||
| #undef HAVE_SYSLOG_H | |||
| /* Define to 1 if you have the <sys/stat.h> header file. */ | |||
| #undef HAVE_SYS_STAT_H | |||
| /* Define to 1 if you have the <sys/types.h> header file. */ | |||
| #undef HAVE_SYS_TYPES_H | |||
| /* Define to 1 if you have the <unistd.h> header file. */ | |||
| #undef HAVE_UNISTD_H | |||
| /* Define to 1 if you have the `vfork' function. */ | |||
| #undef HAVE_VFORK | |||
| /* Define to 1 if you have the <vfork.h> header file. */ | |||
| #undef HAVE_VFORK_H | |||
| /* Define to 1 if `fork' works. */ | |||
| #undef HAVE_WORKING_FORK | |||
| /* Define to 1 if `vfork' works. */ | |||
| #undef HAVE_WORKING_VFORK | |||
| /* Define to 1 if you have the <zlib.h> header file. */ | |||
| #undef HAVE_ZLIB_H | |||
| /* Name of package */ | |||
| #undef PACKAGE | |||
| /* Define to the address where bug reports for this package should be sent. */ | |||
| #undef PACKAGE_BUGREPORT | |||
| /* Define to the full name of this package. */ | |||
| #undef PACKAGE_NAME | |||
| /* Define to the full name and version of this package. */ | |||
| #undef PACKAGE_STRING | |||
| /* Define to the one symbol short name of this package. */ | |||
| #undef PACKAGE_TARNAME | |||
| /* Define to the home page for this package. */ | |||
| #undef PACKAGE_URL | |||
| /* Define to the version of this package. */ | |||
| #undef PACKAGE_VERSION | |||
| /* Define to 1 if you have the ANSI C header files. */ | |||
| #undef STDC_HEADERS | |||
| /* Version number of package */ | |||
| #undef VERSION | |||
| /* Define for Solaris 2.5.1 so the uint64_t typedef from <sys/synch.h>, | |||
| <pthread.h>, or <semaphore.h> is not used. If the typedef were allowed, the | |||
| #define below would cause a syntax error. */ | |||
| #undef _UINT64_T | |||
| /* Define to rpl_malloc if the replacement function should be used. */ | |||
| #undef malloc | |||
| /* Define to `int' if <sys/types.h> does not define. */ | |||
| #undef pid_t | |||
| /* Define to `unsigned int' if <sys/types.h> does not define. */ | |||
| #undef size_t | |||
| /* Define to `int' if <sys/types.h> does not define. */ | |||
| #undef ssize_t | |||
| /* Define to the type of an unsigned integer type of width exactly 64 bits if | |||
| such a type exists and the standard includes do not define it. */ | |||
| #undef uint64_t | |||
| /* Define as `fork' if `vfork' does not work. */ | |||
| #undef vfork | |||
| @@ -0,0 +1,97 @@ | |||
| # -*- Autoconf -*- | |||
| # Process this file with autoconf to produce a configure script. | |||
| AC_PREREQ([2.69]) | |||
| AC_INIT(septime, 1.0, dev@e2li.org) | |||
| AM_INIT_AUTOMAKE | |||
| AC_CONFIG_SRCDIR([config.h.in]) | |||
| AC_CONFIG_HEADERS([config.h]) | |||
| # Checks for programs. | |||
| PROGMISS="NO" | |||
| AC_PROG_CC | |||
| AC_PROG_MAKE_SET | |||
| AC_PROG_AWK | |||
| AC_PROG_SED | |||
| AC_PROG_GREP | |||
| AC_PROG_EGREP | |||
| #AC_PROG_SORT | |||
| #AC_PROG_UNIQ | |||
| AC_CHECK_PROG([COM1], [cut], [/bin/cut]) | |||
| if test x$COM1 = "x" ; then | |||
| AC_MSG_WARN([cut is missing.]) | |||
| PROGMISS="YES" | |||
| fi | |||
| AC_CHECK_PROG([COM2], [sort], [/bin/sort]) | |||
| if test x$COM2 = "x" ; then | |||
| AC_MSG_WARN([sort is missing.]) | |||
| PROGMISS="YES" | |||
| fi | |||
| AC_CHECK_PROG([COM3], [uniq], [/bin/uniq]) | |||
| if test x$COM3 = "x" ; then | |||
| AC_MSG_WARN([uniq is missing.]) | |||
| PROGMISS="YES" | |||
| fi | |||
| AC_CHECK_PROG([ADMCOM], [tcpdump], [/sbin/tcpdump], "", | |||
| [$PATH$PATH_SEPARATOR/sbin$PATH_SEPARATOR/usr/sbin]) | |||
| if test x$ADMCOM = "x" ; then | |||
| AC_MSG_WARN([tcpdump is missing.]) | |||
| PROGMISS="YES" | |||
| fi | |||
| AC_CHECK_PROG(ADMCOM2, whois, [/sbin/whois], "", | |||
| [$PATH$PATH_SEPARATOR/sbin$PATH_SEPARATOR/usr/sbin]) | |||
| if test x$ADMCOM2 = "x" ; then | |||
| AC_MSG_WARN([whois is missing.]) | |||
| PROGMISS="YES" | |||
| fi | |||
| AC_CHECK_PROG(ADMCOM3, iptables, [/sbin/iptables], "", | |||
| [$PATH$PATH_SEPARATOR/sbin$PATH_SEPARATOR/usr/sbin]) | |||
| if test x$ADMCOM3 = "x" ; then | |||
| AC_MSG_WARN([iptables is missing.]) | |||
| PROGMISS="YES" | |||
| fi | |||
| AC_CHECK_PROG(ADMCOM4, ip6tables, [/sbin/ip6tables], "", | |||
| [$PATH$PATH_SEPARATOR/sbin$PATH_SEPARATOR/usr/sbin]) | |||
| if test x$ADMCOM4 = "x" ; then | |||
| AC_MSG_WARN([ip6tables is missing.]) | |||
| PROGMISS="YES" | |||
| fi | |||
| if test $PROGMISS = "YES" ; then | |||
| AC_MSG_ERROR([All the programs listed above are required to run septime.]) | |||
| fi | |||
| # Checks for libraries. | |||
| AC_CHECK_LIB(pthread,pthread_create) | |||
| AC_CHECK_LIB(readline,readline) | |||
| AC_CHECK_LIB(z,inflate) | |||
| # Checks for header files. | |||
| AC_CHECK_HEADERS([arpa/inet.h fcntl.h stdint.h stdlib.h string.h strings.h syslog.h unistd.h]) | |||
| AC_CHECK_HEADERS([pthread.h]) | |||
| AC_CHECK_HEADERS([zlib.h]) | |||
| AC_CHECK_HEADERS([readline/readline.h]) | |||
| AC_CHECK_HEADERS([readline/history.h]) | |||
| # Checks for typedefs, structures, and compiler characteristics. | |||
| AC_TYPE_PID_T | |||
| AC_TYPE_SIZE_T | |||
| AC_TYPE_SSIZE_T | |||
| AC_TYPE_UINT64_T | |||
| # Checks for library functions. | |||
| AC_FUNC_FORK | |||
| AC_FUNC_MALLOC | |||
| AC_CHECK_FUNCS([dup2 memmove strchr strdup strrchr strstr]) | |||
| AC_CONFIG_FILES([Makefile | |||
| src/Makefile]) | |||
| AC_OUTPUT | |||
| @@ -0,0 +1,791 @@ | |||
| #! /bin/sh | |||
| # depcomp - compile a program generating dependencies as side-effects | |||
| scriptversion=2018-03-07.03; # UTC | |||
| # Copyright (C) 1999-2018 Free Software Foundation, Inc. | |||
| # This program is free software; you can redistribute it and/or modify | |||
| # it under the terms of the GNU General Public License as published by | |||
| # the Free Software Foundation; either version 2, or (at your option) | |||
| # any later version. | |||
| # This program is distributed in the hope that it will be useful, | |||
| # but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
| # GNU General Public License for more details. | |||
| # You should have received a copy of the GNU General Public License | |||
| # along with this program. If not, see <https://www.gnu.org/licenses/>. | |||
| # As a special exception to the GNU General Public License, if you | |||
| # distribute this file as part of a program that contains a | |||
| # configuration script generated by Autoconf, you may include it under | |||
| # the same distribution terms that you use for the rest of that program. | |||
| # Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. | |||
| case $1 in | |||
| '') | |||
| echo "$0: No command. Try '$0 --help' for more information." 1>&2 | |||
| exit 1; | |||
| ;; | |||
| -h | --h*) | |||
| cat <<\EOF | |||
| Usage: depcomp [--help] [--version] PROGRAM [ARGS] | |||
| Run PROGRAMS ARGS to compile a file, generating dependencies | |||
| as side-effects. | |||
| Environment variables: | |||
| depmode Dependency tracking mode. | |||
| source Source file read by 'PROGRAMS ARGS'. | |||
| object Object file output by 'PROGRAMS ARGS'. | |||
| DEPDIR directory where to store dependencies. | |||
| depfile Dependency file to output. | |||
| tmpdepfile Temporary file to use when outputting dependencies. | |||
| libtool Whether libtool is used (yes/no). | |||
| Report bugs to <bug-automake@gnu.org>. | |||
| EOF | |||
| exit $? | |||
| ;; | |||
| -v | --v*) | |||
| echo "depcomp $scriptversion" | |||
| exit $? | |||
| ;; | |||
| esac | |||
| # Get the directory component of the given path, and save it in the | |||
| # global variables '$dir'. Note that this directory component will | |||
| # be either empty or ending with a '/' character. This is deliberate. | |||
| set_dir_from () | |||
| { | |||
| case $1 in | |||
| */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; | |||
| *) dir=;; | |||
| esac | |||
| } | |||
| # Get the suffix-stripped basename of the given path, and save it the | |||
| # global variable '$base'. | |||
| set_base_from () | |||
| { | |||
| base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` | |||
| } | |||
| # If no dependency file was actually created by the compiler invocation, | |||
| # we still have to create a dummy depfile, to avoid errors with the | |||
| # Makefile "include basename.Plo" scheme. | |||
| make_dummy_depfile () | |||
| { | |||
| echo "#dummy" > "$depfile" | |||
| } | |||
| # Factor out some common post-processing of the generated depfile. | |||
| # Requires the auxiliary global variable '$tmpdepfile' to be set. | |||
| aix_post_process_depfile () | |||
| { | |||
| # If the compiler actually managed to produce a dependency file, | |||
| # post-process it. | |||
| if test -f "$tmpdepfile"; then | |||
| # Each line is of the form 'foo.o: dependency.h'. | |||
| # Do two passes, one to just change these to | |||
| # $object: dependency.h | |||
| # and one to simply output | |||
| # dependency.h: | |||
| # which is needed to avoid the deleted-header problem. | |||
| { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" | |||
| sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" | |||
| } > "$depfile" | |||
| rm -f "$tmpdepfile" | |||
| else | |||
| make_dummy_depfile | |||
| fi | |||
| } | |||
| # A tabulation character. | |||
| tab=' ' | |||
| # A newline character. | |||
| nl=' | |||
| ' | |||
| # Character ranges might be problematic outside the C locale. | |||
| # These definitions help. | |||
| upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ | |||
| lower=abcdefghijklmnopqrstuvwxyz | |||
| digits=0123456789 | |||
| alpha=${upper}${lower} | |||
| if test -z "$depmode" || test -z "$source" || test -z "$object"; then | |||
| echo "depcomp: Variables source, object and depmode must be set" 1>&2 | |||
| exit 1 | |||
| fi | |||
| # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. | |||
| depfile=${depfile-`echo "$object" | | |||
| sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} | |||
| tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} | |||
| rm -f "$tmpdepfile" | |||
| # Avoid interferences from the environment. | |||
| gccflag= dashmflag= | |||
| # Some modes work just like other modes, but use different flags. We | |||
| # parameterize here, but still list the modes in the big case below, | |||
| # to make depend.m4 easier to write. Note that we *cannot* use a case | |||
| # here, because this file can only contain one case statement. | |||
| if test "$depmode" = hp; then | |||
| # HP compiler uses -M and no extra arg. | |||
| gccflag=-M | |||
| depmode=gcc | |||
| fi | |||
| if test "$depmode" = dashXmstdout; then | |||
| # This is just like dashmstdout with a different argument. | |||
| dashmflag=-xM | |||
| depmode=dashmstdout | |||
| fi | |||
| cygpath_u="cygpath -u -f -" | |||
| if test "$depmode" = msvcmsys; then | |||
| # This is just like msvisualcpp but w/o cygpath translation. | |||
| # Just convert the backslash-escaped backslashes to single forward | |||
| # slashes to satisfy depend.m4 | |||
| cygpath_u='sed s,\\\\,/,g' | |||
| depmode=msvisualcpp | |||
| fi | |||
| if test "$depmode" = msvc7msys; then | |||
| # This is just like msvc7 but w/o cygpath translation. | |||
| # Just convert the backslash-escaped backslashes to single forward | |||
| # slashes to satisfy depend.m4 | |||
| cygpath_u='sed s,\\\\,/,g' | |||
| depmode=msvc7 | |||
| fi | |||
| if test "$depmode" = xlc; then | |||
| # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. | |||
| gccflag=-qmakedep=gcc,-MF | |||
| depmode=gcc | |||
| fi | |||
| case "$depmode" in | |||
| gcc3) | |||
| ## gcc 3 implements dependency tracking that does exactly what | |||
| ## we want. Yay! Note: for some reason libtool 1.4 doesn't like | |||
| ## it if -MD -MP comes after the -MF stuff. Hmm. | |||
| ## Unfortunately, FreeBSD c89 acceptance of flags depends upon | |||
| ## the command line argument order; so add the flags where they | |||
| ## appear in depend2.am. Note that the slowdown incurred here | |||
| ## affects only configure: in makefiles, %FASTDEP% shortcuts this. | |||
| for arg | |||
| do | |||
| case $arg in | |||
| -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; | |||
| *) set fnord "$@" "$arg" ;; | |||
| esac | |||
| shift # fnord | |||
| shift # $arg | |||
| done | |||
| "$@" | |||
| stat=$? | |||
| if test $stat -ne 0; then | |||
| rm -f "$tmpdepfile" | |||
| exit $stat | |||
| fi | |||
| mv "$tmpdepfile" "$depfile" | |||
| ;; | |||
| gcc) | |||
| ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. | |||
| ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. | |||
| ## (see the conditional assignment to $gccflag above). | |||
| ## There are various ways to get dependency output from gcc. Here's | |||
| ## why we pick this rather obscure method: | |||
| ## - Don't want to use -MD because we'd like the dependencies to end | |||
| ## up in a subdir. Having to rename by hand is ugly. | |||
| ## (We might end up doing this anyway to support other compilers.) | |||
| ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like | |||
| ## -MM, not -M (despite what the docs say). Also, it might not be | |||
| ## supported by the other compilers which use the 'gcc' depmode. | |||
| ## - Using -M directly means running the compiler twice (even worse | |||
| ## than renaming). | |||
| if test -z "$gccflag"; then | |||
| gccflag=-MD, | |||
| fi | |||
| "$@" -Wp,"$gccflag$tmpdepfile" | |||
| stat=$? | |||
| if test $stat -ne 0; then | |||
| rm -f "$tmpdepfile" | |||
| exit $stat | |||
| fi | |||
| rm -f "$depfile" | |||
| echo "$object : \\" > "$depfile" | |||
| # The second -e expression handles DOS-style file names with drive | |||
| # letters. | |||
| sed -e 's/^[^:]*: / /' \ | |||
| -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" | |||
| ## This next piece of magic avoids the "deleted header file" problem. | |||
| ## The problem is that when a header file which appears in a .P file | |||
| ## is deleted, the dependency causes make to die (because there is | |||
| ## typically no way to rebuild the header). We avoid this by adding | |||
| ## dummy dependencies for each header file. Too bad gcc doesn't do | |||
| ## this for us directly. | |||
| ## Some versions of gcc put a space before the ':'. On the theory | |||
| ## that the space means something, we add a space to the output as | |||
| ## well. hp depmode also adds that space, but also prefixes the VPATH | |||
| ## to the object. Take care to not repeat it in the output. | |||
| ## Some versions of the HPUX 10.20 sed can't process this invocation | |||
| ## correctly. Breaking it into two sed invocations is a workaround. | |||
| tr ' ' "$nl" < "$tmpdepfile" \ | |||
| | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | |||
| | sed -e 's/$/ :/' >> "$depfile" | |||
| rm -f "$tmpdepfile" | |||
| ;; | |||
| hp) | |||
| # This case exists only to let depend.m4 do its work. It works by | |||
| # looking at the text of this script. This case will never be run, | |||
| # since it is checked for above. | |||
| exit 1 | |||
| ;; | |||
| sgi) | |||
| if test "$libtool" = yes; then | |||
| "$@" "-Wp,-MDupdate,$tmpdepfile" | |||
| else | |||
| "$@" -MDupdate "$tmpdepfile" | |||
| fi | |||
| stat=$? | |||
| if test $stat -ne 0; then | |||
| rm -f "$tmpdepfile" | |||
| exit $stat | |||
| fi | |||
| rm -f "$depfile" | |||
| if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files | |||
| echo "$object : \\" > "$depfile" | |||
| # Clip off the initial element (the dependent). Don't try to be | |||
| # clever and replace this with sed code, as IRIX sed won't handle | |||
| # lines with more than a fixed number of characters (4096 in | |||
| # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; | |||
| # the IRIX cc adds comments like '#:fec' to the end of the | |||
| # dependency line. | |||
| tr ' ' "$nl" < "$tmpdepfile" \ | |||
| | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ | |||
| | tr "$nl" ' ' >> "$depfile" | |||
| echo >> "$depfile" | |||
| # The second pass generates a dummy entry for each header file. | |||
| tr ' ' "$nl" < "$tmpdepfile" \ | |||
| | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ | |||
| >> "$depfile" | |||
| else | |||
| make_dummy_depfile | |||
| fi | |||
| rm -f "$tmpdepfile" | |||
| ;; | |||
| xlc) | |||
| # This case exists only to let depend.m4 do its work. It works by | |||
| # looking at the text of this script. This case will never be run, | |||
| # since it is checked for above. | |||
| exit 1 | |||
| ;; | |||
| aix) | |||
| # The C for AIX Compiler uses -M and outputs the dependencies | |||
| # in a .u file. In older versions, this file always lives in the | |||
| # current directory. Also, the AIX compiler puts '$object:' at the | |||
| # start of each line; $object doesn't have directory information. | |||
| # Version 6 uses the directory in both cases. | |||
| set_dir_from "$object" | |||
| set_base_from "$object" | |||
| if test "$libtool" = yes; then | |||
| tmpdepfile1=$dir$base.u | |||
| tmpdepfile2=$base.u | |||
| tmpdepfile3=$dir.libs/$base.u | |||
| "$@" -Wc,-M | |||
| else | |||
| tmpdepfile1=$dir$base.u | |||
| tmpdepfile2=$dir$base.u | |||
| tmpdepfile3=$dir$base.u | |||
| "$@" -M | |||
| fi | |||
| stat=$? | |||
| if test $stat -ne 0; then | |||
| rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" | |||
| exit $stat | |||
| fi | |||
| for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" | |||
| do | |||
| test -f "$tmpdepfile" && break | |||
| done | |||
| aix_post_process_depfile | |||
| ;; | |||
| tcc) | |||
| # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 | |||
| # FIXME: That version still under development at the moment of writing. | |||
| # Make that this statement remains true also for stable, released | |||
| # versions. | |||
| # It will wrap lines (doesn't matter whether long or short) with a | |||
| # trailing '\', as in: | |||
| # | |||
| # foo.o : \ | |||
| # foo.c \ | |||
| # foo.h \ | |||
| # | |||
| # It will put a trailing '\' even on the last line, and will use leading | |||
| # spaces rather than leading tabs (at least since its commit 0394caf7 | |||
| # "Emit spaces for -MD"). | |||
| "$@" -MD -MF "$tmpdepfile" | |||
| stat=$? | |||
| if test $stat -ne 0; then | |||
| rm -f "$tmpdepfile" | |||
| exit $stat | |||
| fi | |||
| rm -f "$depfile" | |||
| # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. | |||
| # We have to change lines of the first kind to '$object: \'. | |||
| sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" | |||
| # And for each line of the second kind, we have to emit a 'dep.h:' | |||
| # dummy dependency, to avoid the deleted-header problem. | |||
| sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" | |||
| rm -f "$tmpdepfile" | |||
| ;; | |||
| ## The order of this option in the case statement is important, since the | |||
| ## shell code in configure will try each of these formats in the order | |||
| ## listed in this file. A plain '-MD' option would be understood by many | |||
| ## compilers, so we must ensure this comes after the gcc and icc options. | |||
| pgcc) | |||
| # Portland's C compiler understands '-MD'. | |||
| # Will always output deps to 'file.d' where file is the root name of the | |||
| # source file under compilation, even if file resides in a subdirectory. | |||
| # The object file name does not affect the name of the '.d' file. | |||
| # pgcc 10.2 will output | |||
| # foo.o: sub/foo.c sub/foo.h | |||
| # and will wrap long lines using '\' : | |||
| # foo.o: sub/foo.c ... \ | |||
| # sub/foo.h ... \ | |||
| # ... | |||
| set_dir_from "$object" | |||
| # Use the source, not the object, to determine the base name, since | |||
| # that's sadly what pgcc will do too. | |||
| set_base_from "$source" | |||
| tmpdepfile=$base.d | |||
| # For projects that build the same source file twice into different object | |||
| # files, the pgcc approach of using the *source* file root name can cause | |||
| # problems in parallel builds. Use a locking strategy to avoid stomping on | |||
| # the same $tmpdepfile. | |||
| lockdir=$base.d-lock | |||
| trap " | |||
| echo '$0: caught signal, cleaning up...' >&2 | |||
| rmdir '$lockdir' | |||
| exit 1 | |||
| " 1 2 13 15 | |||
| numtries=100 | |||
| i=$numtries | |||
| while test $i -gt 0; do | |||
| # mkdir is a portable test-and-set. | |||
| if mkdir "$lockdir" 2>/dev/null; then | |||
| # This process acquired the lock. | |||
| "$@" -MD | |||
| stat=$? | |||
| # Release the lock. | |||
| rmdir "$lockdir" | |||
| break | |||
| else | |||
| # If the lock is being held by a different process, wait | |||
| # until the winning process is done or we timeout. | |||
| while test -d "$lockdir" && test $i -gt 0; do | |||
| sleep 1 | |||
| i=`expr $i - 1` | |||
| done | |||
| fi | |||
| i=`expr $i - 1` | |||
| done | |||
| trap - 1 2 13 15 | |||
| if test $i -le 0; then | |||
| echo "$0: failed to acquire lock after $numtries attempts" >&2 | |||
| echo "$0: check lockdir '$lockdir'" >&2 | |||
| exit 1 | |||
| fi | |||
| if test $stat -ne 0; then | |||
| rm -f "$tmpdepfile" | |||
| exit $stat | |||
| fi | |||
| rm -f "$depfile" | |||
| # Each line is of the form `foo.o: dependent.h', | |||
| # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. | |||
| # Do two passes, one to just change these to | |||
| # `$object: dependent.h' and one to simply `dependent.h:'. | |||
| sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" | |||
| # Some versions of the HPUX 10.20 sed can't process this invocation | |||
| # correctly. Breaking it into two sed invocations is a workaround. | |||
| sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ | |||
| | sed -e 's/$/ :/' >> "$depfile" | |||
| rm -f "$tmpdepfile" | |||
| ;; | |||
| hp2) | |||
| # The "hp" stanza above does not work with aCC (C++) and HP's ia64 | |||
| # compilers, which have integrated preprocessors. The correct option | |||
| # to use with these is +Maked; it writes dependencies to a file named | |||
| # 'foo.d', which lands next to the object file, wherever that | |||
| # happens to be. | |||
| # Much of this is similar to the tru64 case; see comments there. | |||
| set_dir_from "$object" | |||
| set_base_from "$object" | |||
| if test "$libtool" = yes; then | |||
| tmpdepfile1=$dir$base.d | |||
| tmpdepfile2=$dir.libs/$base.d | |||
| "$@" -Wc,+Maked | |||
| else | |||
| tmpdepfile1=$dir$base.d | |||
| tmpdepfile2=$dir$base.d | |||
| "$@" +Maked | |||
| fi | |||
| stat=$? | |||
| if test $stat -ne 0; then | |||
| rm -f "$tmpdepfile1" "$tmpdepfile2" | |||
| exit $stat | |||
| fi | |||
| for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" | |||
| do | |||
| test -f "$tmpdepfile" && break | |||
| done | |||
| if test -f "$tmpdepfile"; then | |||
| sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" | |||
| # Add 'dependent.h:' lines. | |||
| sed -ne '2,${ | |||
| s/^ *// | |||
| s/ \\*$// | |||
| s/$/:/ | |||
| p | |||
| }' "$tmpdepfile" >> "$depfile" | |||
| else | |||
| make_dummy_depfile | |||
| fi | |||
| rm -f "$tmpdepfile" "$tmpdepfile2" | |||
| ;; | |||
| tru64) | |||
| # The Tru64 compiler uses -MD to generate dependencies as a side | |||
| # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. | |||
| # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put | |||
| # dependencies in 'foo.d' instead, so we check for that too. | |||
| # Subdirectories are respected. | |||
| set_dir_from "$object" | |||
| set_base_from "$object" | |||
| if test "$libtool" = yes; then | |||
| # Libtool generates 2 separate objects for the 2 libraries. These | |||
| # two compilations output dependencies in $dir.libs/$base.o.d and | |||
| # in $dir$base.o.d. We have to check for both files, because | |||
| # one of the two compilations can be disabled. We should prefer | |||
| # $dir$base.o.d over $dir.libs/$base.o.d because the latter is | |||
| # automatically cleaned when .libs/ is deleted, while ignoring | |||
| # the former would cause a distcleancheck panic. | |||
| tmpdepfile1=$dir$base.o.d # libtool 1.5 | |||
| tmpdepfile2=$dir.libs/$base.o.d # Likewise. | |||
| tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 | |||
| "$@" -Wc,-MD | |||
| else | |||
| tmpdepfile1=$dir$base.d | |||
| tmpdepfile2=$dir$base.d | |||
| tmpdepfile3=$dir$base.d | |||
| "$@" -MD | |||
| fi | |||
| stat=$? | |||
| if test $stat -ne 0; then | |||
| rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" | |||
| exit $stat | |||
| fi | |||
| for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" | |||
| do | |||
| test -f "$tmpdepfile" && break | |||
| done | |||
| # Same post-processing that is required for AIX mode. | |||
| aix_post_process_depfile | |||
| ;; | |||
| msvc7) | |||
| if test "$libtool" = yes; then | |||
| showIncludes=-Wc,-showIncludes | |||
| else | |||
| showIncludes=-showIncludes | |||
| fi | |||
| "$@" $showIncludes > "$tmpdepfile" | |||
| stat=$? | |||
| grep -v '^Note: including file: ' "$tmpdepfile" | |||
| if test $stat -ne 0; then | |||
| rm -f "$tmpdepfile" | |||
| exit $stat | |||
| fi | |||
| rm -f "$depfile" | |||
| echo "$object : \\" > "$depfile" | |||
| # The first sed program below extracts the file names and escapes | |||
| # backslashes for cygpath. The second sed program outputs the file | |||
| # name when reading, but also accumulates all include files in the | |||
| # hold buffer in order to output them again at the end. This only | |||
| # works with sed implementations that can handle large buffers. | |||
| sed < "$tmpdepfile" -n ' | |||
| /^Note: including file: *\(.*\)/ { | |||
| s//\1/ | |||
| s/\\/\\\\/g | |||
| p | |||
| }' | $cygpath_u | sort -u | sed -n ' | |||
| s/ /\\ /g | |||
| s/\(.*\)/'"$tab"'\1 \\/p | |||
| s/.\(.*\) \\/\1:/ | |||
| H | |||
| $ { | |||
| s/.*/'"$tab"'/ | |||
| G | |||
| p | |||
| }' >> "$depfile" | |||
| echo >> "$depfile" # make sure the fragment doesn't end with a backslash | |||
| rm -f "$tmpdepfile" | |||
| ;; | |||
| msvc7msys) | |||
| # This case exists only to let depend.m4 do its work. It works by | |||
| # looking at the text of this script. This case will never be run, | |||
| # since it is checked for above. | |||
| exit 1 | |||
| ;; | |||
| #nosideeffect) | |||
| # This comment above is used by automake to tell side-effect | |||
| # dependency tracking mechanisms from slower ones. | |||
| dashmstdout) | |||
| # Important note: in order to support this mode, a compiler *must* | |||
| # always write the preprocessed file to stdout, regardless of -o. | |||
| "$@" || exit $? | |||
| # Remove the call to Libtool. | |||
| if test "$libtool" = yes; then | |||
| while test "X$1" != 'X--mode=compile'; do | |||
| shift | |||
| done | |||
| shift | |||
| fi | |||
| # Remove '-o $object'. | |||
| IFS=" " | |||
| for arg | |||
| do | |||
| case $arg in | |||
| -o) | |||
| shift | |||
| ;; | |||
| $object) | |||
| shift | |||
| ;; | |||
| *) | |||
| set fnord "$@" "$arg" | |||
| shift # fnord | |||
| shift # $arg | |||
| ;; | |||
| esac | |||
| done | |||
| test -z "$dashmflag" && dashmflag=-M | |||
| # Require at least two characters before searching for ':' | |||
| # in the target name. This is to cope with DOS-style filenames: | |||
| # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. | |||
| "$@" $dashmflag | | |||
| sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" | |||
| rm -f "$depfile" | |||
| cat < "$tmpdepfile" > "$depfile" | |||
| # Some versions of the HPUX 10.20 sed can't process this sed invocation | |||
| # correctly. Breaking it into two sed invocations is a workaround. | |||
| tr ' ' "$nl" < "$tmpdepfile" \ | |||
| | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | |||
| | sed -e 's/$/ :/' >> "$depfile" | |||
| rm -f "$tmpdepfile" | |||
| ;; | |||
| dashXmstdout) | |||
| # This case only exists to satisfy depend.m4. It is never actually | |||
| # run, as this mode is specially recognized in the preamble. | |||
| exit 1 | |||
| ;; | |||
| makedepend) | |||
| "$@" || exit $? | |||
| # Remove any Libtool call | |||
| if test "$libtool" = yes; then | |||
| while test "X$1" != 'X--mode=compile'; do | |||
| shift | |||
| done | |||
| shift | |||
| fi | |||
| # X makedepend | |||
| shift | |||
| cleared=no eat=no | |||
| for arg | |||
| do | |||
| case $cleared in | |||
| no) | |||
| set ""; shift | |||
| cleared=yes ;; | |||
| esac | |||
| if test $eat = yes; then | |||
| eat=no | |||
| continue | |||
| fi | |||
| case "$arg" in | |||
| -D*|-I*) | |||
| set fnord "$@" "$arg"; shift ;; | |||
| # Strip any option that makedepend may not understand. Remove | |||
| # the object too, otherwise makedepend will parse it as a source file. | |||
| -arch) | |||
| eat=yes ;; | |||
| -*|$object) | |||
| ;; | |||
| *) | |||
| set fnord "$@" "$arg"; shift ;; | |||
| esac | |||
| done | |||
| obj_suffix=`echo "$object" | sed 's/^.*\././'` | |||
| touch "$tmpdepfile" | |||
| ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" | |||
| rm -f "$depfile" | |||
| # makedepend may prepend the VPATH from the source file name to the object. | |||
| # No need to regex-escape $object, excess matching of '.' is harmless. | |||
| sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" | |||
| # Some versions of the HPUX 10.20 sed can't process the last invocation | |||
| # correctly. Breaking it into two sed invocations is a workaround. | |||
| sed '1,2d' "$tmpdepfile" \ | |||
| | tr ' ' "$nl" \ | |||
| | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | |||
| | sed -e 's/$/ :/' >> "$depfile" | |||
| rm -f "$tmpdepfile" "$tmpdepfile".bak | |||
| ;; | |||
| cpp) | |||
| # Important note: in order to support this mode, a compiler *must* | |||
| # always write the preprocessed file to stdout. | |||
| "$@" || exit $? | |||
| # Remove the call to Libtool. | |||
| if test "$libtool" = yes; then | |||
| while test "X$1" != 'X--mode=compile'; do | |||
| shift | |||
| done | |||
| shift | |||
| fi | |||
| # Remove '-o $object'. | |||
| IFS=" " | |||
| for arg | |||
| do | |||
| case $arg in | |||
| -o) | |||
| shift | |||
| ;; | |||
| $object) | |||
| shift | |||
| ;; | |||
| *) | |||
| set fnord "$@" "$arg" | |||
| shift # fnord | |||
| shift # $arg | |||
| ;; | |||
| esac | |||
| done | |||
| "$@" -E \ | |||
| | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ | |||
| -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ | |||
| | sed '$ s: \\$::' > "$tmpdepfile" | |||
| rm -f "$depfile" | |||
| echo "$object : \\" > "$depfile" | |||
| cat < "$tmpdepfile" >> "$depfile" | |||
| sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" | |||
| rm -f "$tmpdepfile" | |||
| ;; | |||
| msvisualcpp) | |||
| # Important note: in order to support this mode, a compiler *must* | |||
| # always write the preprocessed file to stdout. | |||
| "$@" || exit $? | |||
| # Remove the call to Libtool. | |||
| if test "$libtool" = yes; then | |||
| while test "X$1" != 'X--mode=compile'; do | |||
| shift | |||
| done | |||
| shift | |||
| fi | |||
| IFS=" " | |||
| for arg | |||
| do | |||
| case "$arg" in | |||
| -o) | |||
| shift | |||
| ;; | |||
| $object) | |||
| shift | |||
| ;; | |||
| "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") | |||
| set fnord "$@" | |||
| shift | |||
| shift | |||
| ;; | |||
| *) | |||
| set fnord "$@" "$arg" | |||
| shift | |||
| shift | |||
| ;; | |||
| esac | |||
| done | |||
| "$@" -E 2>/dev/null | | |||
| sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" | |||
| rm -f "$depfile" | |||
| echo "$object : \\" > "$depfile" | |||
| sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" | |||
| echo "$tab" >> "$depfile" | |||
| sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" | |||
| rm -f "$tmpdepfile" | |||
| ;; | |||
| msvcmsys) | |||
| # This case exists only to let depend.m4 do its work. It works by | |||
| # looking at the text of this script. This case will never be run, | |||
| # since it is checked for above. | |||
| exit 1 | |||
| ;; | |||
| none) | |||
| exec "$@" | |||
| ;; | |||
| *) | |||
| echo "Unknown depmode $depmode" 1>&2 | |||
| exit 1 | |||
| ;; | |||
| esac | |||
| exit 0 | |||
| # Local Variables: | |||
| # mode: shell-script | |||
| # sh-indentation: 2 | |||
| # eval: (add-hook 'before-save-hook 'time-stamp) | |||
| # time-stamp-start: "scriptversion=" | |||
| # time-stamp-format: "%:y-%02m-%02d.%02H" | |||
| # time-stamp-time-zone: "UTC0" | |||
| # time-stamp-end: "; # UTC" | |||
| # End: | |||
| @@ -0,0 +1,518 @@ | |||
| #!/bin/sh | |||
| # install - install a program, script, or datafile | |||
| scriptversion=2018-03-11.20; # UTC | |||
| # This originates from X11R5 (mit/util/scripts/install.sh), which was | |||
| # later released in X11R6 (xc/config/util/install.sh) with the | |||
| # following copyright and license. | |||
| # | |||
| # Copyright (C) 1994 X Consortium | |||
| # | |||
| # Permission is hereby granted, free of charge, to any person obtaining a copy | |||
| # of this software and associated documentation files (the "Software"), to | |||
| # deal in the Software without restriction, including without limitation the | |||
| # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | |||
| # sell copies of the Software, and to permit persons to whom the Software is | |||
| # furnished to do so, subject to the following conditions: | |||
| # | |||
| # The above copyright notice and this permission notice shall be included in | |||
| # all copies or substantial portions of the Software. | |||
| # | |||
| # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |||
| # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |||
| # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |||
| # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN | |||
| # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- | |||
| # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | |||
| # | |||
| # Except as contained in this notice, the name of the X Consortium shall not | |||
| # be used in advertising or otherwise to promote the sale, use or other deal- | |||
| # ings in this Software without prior written authorization from the X Consor- | |||
| # tium. | |||
| # | |||
| # | |||
| # FSF changes to this file are in the public domain. | |||
| # | |||
| # 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. | |||
| # | |||
| # This script is compatible with the BSD install script, but was written | |||
| # from scratch. | |||
| tab=' ' | |||
| nl=' | |||
| ' | |||
| IFS=" $tab$nl" | |||
| # Set DOITPROG to "echo" to test this script. | |||
| doit=${DOITPROG-} | |||
| doit_exec=${doit:-exec} | |||
| # Put in absolute file names if you don't have them in your path; | |||
| # or use environment vars. | |||
| chgrpprog=${CHGRPPROG-chgrp} | |||
| chmodprog=${CHMODPROG-chmod} | |||
| chownprog=${CHOWNPROG-chown} | |||
| cmpprog=${CMPPROG-cmp} | |||
| cpprog=${CPPROG-cp} | |||
| mkdirprog=${MKDIRPROG-mkdir} | |||
| mvprog=${MVPROG-mv} | |||
| rmprog=${RMPROG-rm} | |||
| stripprog=${STRIPPROG-strip} | |||
| posix_mkdir= | |||
| # Desired mode of installed file. | |||
| mode=0755 | |||
| chgrpcmd= | |||
| chmodcmd=$chmodprog | |||
| chowncmd= | |||
| mvcmd=$mvprog | |||
| rmcmd="$rmprog -f" | |||
| stripcmd= | |||
| src= | |||
| dst= | |||
| dir_arg= | |||
| dst_arg= | |||
| copy_on_change=false | |||
| is_target_a_directory=possibly | |||
| usage="\ | |||
| Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE | |||
| or: $0 [OPTION]... SRCFILES... DIRECTORY | |||
| or: $0 [OPTION]... -t DIRECTORY SRCFILES... | |||
| or: $0 [OPTION]... -d DIRECTORIES... | |||
| In the 1st form, copy SRCFILE to DSTFILE. | |||
| In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. | |||
| In the 4th, create DIRECTORIES. | |||
| Options: | |||
| --help display this help and exit. | |||
| --version display version info and exit. | |||
| -c (ignored) | |||
| -C install only if different (preserve the last data modification time) | |||
| -d create directories instead of installing files. | |||
| -g GROUP $chgrpprog installed files to GROUP. | |||
| -m MODE $chmodprog installed files to MODE. | |||
| -o USER $chownprog installed files to USER. | |||
| -s $stripprog installed files. | |||
| -t DIRECTORY install into DIRECTORY. | |||
| -T report an error if DSTFILE is a directory. | |||
| Environment variables override the default commands: | |||
| CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG | |||
| RMPROG STRIPPROG | |||
| " | |||
| while test $# -ne 0; do | |||
| case $1 in | |||
| -c) ;; | |||
| -C) copy_on_change=true;; | |||
| -d) dir_arg=true;; | |||
| -g) chgrpcmd="$chgrpprog $2" | |||
| shift;; | |||
| --help) echo "$usage"; exit $?;; | |||
| -m) mode=$2 | |||
| case $mode in | |||
| *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) | |||
| echo "$0: invalid mode: $mode" >&2 | |||
| exit 1;; | |||
| esac | |||
| shift;; | |||
| -o) chowncmd="$chownprog $2" | |||
| shift;; | |||
| -s) stripcmd=$stripprog;; | |||
| -t) | |||
| is_target_a_directory=always | |||
| dst_arg=$2 | |||
| # Protect names problematic for 'test' and other utilities. | |||
| case $dst_arg in | |||
| -* | [=\(\)!]) dst_arg=./$dst_arg;; | |||
| esac | |||
| shift;; | |||
| -T) is_target_a_directory=never;; | |||
| --version) echo "$0 $scriptversion"; exit $?;; | |||
| --) shift | |||
| break;; | |||
| -*) echo "$0: invalid option: $1" >&2 | |||
| exit 1;; | |||
| *) break;; | |||
| esac | |||
| shift | |||
| done | |||
| # We allow the use of options -d and -T together, by making -d | |||
| # take the precedence; this is for compatibility with GNU install. | |||
| if test -n "$dir_arg"; then | |||
| if test -n "$dst_arg"; then | |||
| echo "$0: target directory not allowed when installing a directory." >&2 | |||
| exit 1 | |||
| fi | |||
| fi | |||
| if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then | |||
| # When -d is used, all remaining arguments are directories to create. | |||
| # When -t is used, the destination is already specified. | |||
| # Otherwise, the last argument is the destination. Remove it from $@. | |||
| for arg | |||
| do | |||
| if test -n "$dst_arg"; then | |||
| # $@ is not empty: it contains at least $arg. | |||
| set fnord "$@" "$dst_arg" | |||
| shift # fnord | |||
| fi | |||
| shift # arg | |||
| dst_arg=$arg | |||
| # Protect names problematic for 'test' and other utilities. | |||
| case $dst_arg in | |||
| -* | [=\(\)!]) dst_arg=./$dst_arg;; | |||
| esac | |||
| done | |||
| fi | |||
| if test $# -eq 0; then | |||
| if test -z "$dir_arg"; then | |||
| echo "$0: no input file specified." >&2 | |||
| exit 1 | |||
| fi | |||
| # It's OK to call 'install-sh -d' without argument. | |||
| # This can happen when creating conditional directories. | |||
| exit 0 | |||
| fi | |||
| if test -z "$dir_arg"; then | |||
| if test $# -gt 1 || test "$is_target_a_directory" = always; then | |||
| if test ! -d "$dst_arg"; then | |||
| echo "$0: $dst_arg: Is not a directory." >&2 | |||
| exit 1 | |||
| fi | |||
| fi | |||
| fi | |||
| if test -z "$dir_arg"; then | |||
| do_exit='(exit $ret); exit $ret' | |||
| trap "ret=129; $do_exit" 1 | |||
| trap "ret=130; $do_exit" 2 | |||
| trap "ret=141; $do_exit" 13 | |||
| trap "ret=143; $do_exit" 15 | |||
| # Set umask so as not to create temps with too-generous modes. | |||
| # However, 'strip' requires both read and write access to temps. | |||
| case $mode in | |||
| # Optimize common cases. | |||
| *644) cp_umask=133;; | |||
| *755) cp_umask=22;; | |||
| *[0-7]) | |||
| if test -z "$stripcmd"; then | |||
| u_plus_rw= | |||
| else | |||
| u_plus_rw='% 200' | |||
| fi | |||
| cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; | |||
| *) | |||
| if test -z "$stripcmd"; then | |||
| u_plus_rw= | |||
| else | |||
| u_plus_rw=,u+rw | |||
| fi | |||
| cp_umask=$mode$u_plus_rw;; | |||
| esac | |||
| fi | |||
| for src | |||
| do | |||
| # Protect names problematic for 'test' and other utilities. | |||
| case $src in | |||
| -* | [=\(\)!]) src=./$src;; | |||
| esac | |||
| if test -n "$dir_arg"; then | |||
| dst=$src | |||
| dstdir=$dst | |||
| test -d "$dstdir" | |||
| dstdir_status=$? | |||
| else | |||
| # Waiting for this to be detected by the "$cpprog $src $dsttmp" command | |||
| # might cause directories to be created, which would be especially bad | |||
| # if $src (and thus $dsttmp) contains '*'. | |||
| if test ! -f "$src" && test ! -d "$src"; then | |||
| echo "$0: $src does not exist." >&2 | |||
| exit 1 | |||
| fi | |||
| if test -z "$dst_arg"; then | |||
| echo "$0: no destination specified." >&2 | |||
| exit 1 | |||
| fi | |||
| dst=$dst_arg | |||
| # If destination is a directory, append the input filename. | |||
| if test -d "$dst"; then | |||
| if test "$is_target_a_directory" = never; then | |||
| echo "$0: $dst_arg: Is a directory" >&2 | |||
| exit 1 | |||
| fi | |||
| dstdir=$dst | |||
| dstbase=`basename "$src"` | |||
| case $dst in | |||
| */) dst=$dst$dstbase;; | |||
| *) dst=$dst/$dstbase;; | |||
| esac | |||
| dstdir_status=0 | |||
| else | |||
| dstdir=`dirname "$dst"` | |||
| test -d "$dstdir" | |||
| dstdir_status=$? | |||
| fi | |||
| fi | |||
| case $dstdir in | |||
| */) dstdirslash=$dstdir;; | |||
| *) dstdirslash=$dstdir/;; | |||
| esac | |||
| obsolete_mkdir_used=false | |||
| if test $dstdir_status != 0; then | |||
| case $posix_mkdir in | |||
| '') | |||
| # Create intermediate dirs using mode 755 as modified by the umask. | |||
| # This is like FreeBSD 'install' as of 1997-10-28. | |||
| umask=`umask` | |||
| case $stripcmd.$umask in | |||
| # Optimize common cases. | |||
| *[2367][2367]) mkdir_umask=$umask;; | |||
| .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; | |||
| *[0-7]) | |||
| mkdir_umask=`expr $umask + 22 \ | |||
| - $umask % 100 % 40 + $umask % 20 \ | |||
| - $umask % 10 % 4 + $umask % 2 | |||
| `;; | |||
| *) mkdir_umask=$umask,go-w;; | |||
| esac | |||
| # With -d, create the new directory with the user-specified mode. | |||
| # Otherwise, rely on $mkdir_umask. | |||
| if test -n "$dir_arg"; then | |||
| mkdir_mode=-m$mode | |||
| else | |||
| mkdir_mode= | |||
| fi | |||
| posix_mkdir=false | |||
| case $umask in | |||
| *[123567][0-7][0-7]) | |||
| # POSIX mkdir -p sets u+wx bits regardless of umask, which | |||
| # is incompatible with FreeBSD 'install' when (umask & 300) != 0. | |||
| ;; | |||
| *) | |||
| # Note that $RANDOM variable is not portable (e.g. dash); Use it | |||
| # here however when possible just to lower collision chance. | |||
| tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ | |||
| trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0 | |||
| # Because "mkdir -p" follows existing symlinks and we likely work | |||
| # directly in world-writeable /tmp, make sure that the '$tmpdir' | |||
| # directory is successfully created first before we actually test | |||
| # 'mkdir -p' feature. | |||
| if (umask $mkdir_umask && | |||
| $mkdirprog $mkdir_mode "$tmpdir" && | |||
| exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1 | |||
| then | |||
| if test -z "$dir_arg" || { | |||
| # Check for POSIX incompatibilities with -m. | |||
| # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or | |||
| # other-writable bit of parent directory when it shouldn't. | |||
| # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. | |||
| test_tmpdir="$tmpdir/a" | |||
| ls_ld_tmpdir=`ls -ld "$test_tmpdir"` | |||
| case $ls_ld_tmpdir in | |||
| d????-?r-*) different_mode=700;; | |||
| d????-?--*) different_mode=755;; | |||
| *) false;; | |||
| esac && | |||
| $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { | |||
| ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"` | |||
| test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" | |||
| } | |||
| } | |||
| then posix_mkdir=: | |||
| fi | |||
| rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" | |||
| else | |||
| # Remove any dirs left behind by ancient mkdir implementations. | |||
| rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null | |||
| fi | |||
| trap '' 0;; | |||
| esac;; | |||
| esac | |||
| if | |||
| $posix_mkdir && ( | |||
| umask $mkdir_umask && | |||
| $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" | |||
| ) | |||
| then : | |||
| else | |||
| # The umask is ridiculous, or mkdir does not conform to POSIX, | |||
| # or it failed possibly due to a race condition. Create the | |||
| # directory the slow way, step by step, checking for races as we go. | |||
| case $dstdir in | |||
| /*) prefix='/';; | |||
| [-=\(\)!]*) prefix='./';; | |||
| *) prefix='';; | |||
| esac | |||
| oIFS=$IFS | |||
| IFS=/ | |||
| set -f | |||
| set fnord $dstdir | |||
| shift | |||
| set +f | |||
| IFS=$oIFS | |||
| prefixes= | |||
| for d | |||
| do | |||
| test X"$d" = X && continue | |||
| prefix=$prefix$d | |||
| if test -d "$prefix"; then | |||
| prefixes= | |||
| else | |||
| if $posix_mkdir; then | |||
| (umask=$mkdir_umask && | |||
| $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break | |||
| # Don't fail if two instances are running concurrently. | |||
| test -d "$prefix" || exit 1 | |||
| else | |||
| case $prefix in | |||
| *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; | |||
| *) qprefix=$prefix;; | |||
| esac | |||
| prefixes="$prefixes '$qprefix'" | |||
| fi | |||
| fi | |||
| prefix=$prefix/ | |||
| done | |||
| if test -n "$prefixes"; then | |||
| # Don't fail if two instances are running concurrently. | |||
| (umask $mkdir_umask && | |||
| eval "\$doit_exec \$mkdirprog $prefixes") || | |||
| test -d "$dstdir" || exit 1 | |||
| obsolete_mkdir_used=true | |||
| fi | |||
| fi | |||
| fi | |||
| if test -n "$dir_arg"; then | |||
| { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && | |||
| { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && | |||
| { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || | |||
| test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 | |||
| else | |||
| # Make a couple of temp file names in the proper directory. | |||
| dsttmp=${dstdirslash}_inst.$$_ | |||
| rmtmp=${dstdirslash}_rm.$$_ | |||
| # Trap to clean up those temp files at exit. | |||
| trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 | |||
| # Copy the file name to the temp name. | |||
| (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && | |||
| # and set any options; do chmod last to preserve setuid bits. | |||
| # | |||
| # If any of these fail, we abort the whole thing. If we want to | |||
| # ignore errors from any of these, just make sure not to ignore | |||
| # errors from the above "$doit $cpprog $src $dsttmp" command. | |||
| # | |||
| { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && | |||
| { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && | |||
| { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && | |||
| { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && | |||
| # If -C, don't bother to copy if it wouldn't change the file. | |||
| if $copy_on_change && | |||
| old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && | |||
| new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && | |||
| set -f && | |||
| set X $old && old=:$2:$4:$5:$6 && | |||
| set X $new && new=:$2:$4:$5:$6 && | |||
| set +f && | |||
| test "$old" = "$new" && | |||
| $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 | |||
| then | |||
| rm -f "$dsttmp" | |||
| else | |||
| # Rename the file to the real destination. | |||
| $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || | |||
| # The rename failed, perhaps because mv can't rename something else | |||
| # to itself, or perhaps because mv is so ancient that it does not | |||
| # support -f. | |||
| { | |||
| # Now remove or move aside any old file at destination location. | |||
| # We try this two ways since rm can't unlink itself on some | |||
| # systems and the destination file might be busy for other | |||
| # reasons. In this case, the final cleanup might fail but the new | |||
| # file should still install successfully. | |||
| { | |||
| test ! -f "$dst" || | |||
| $doit $rmcmd -f "$dst" 2>/dev/null || | |||
| { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && | |||
| { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } | |||
| } || | |||
| { echo "$0: cannot unlink or rename $dst" >&2 | |||
| (exit 1); exit 1 | |||
| } | |||
| } && | |||
| # Now rename the file to the real destination. | |||
| $doit $mvcmd "$dsttmp" "$dst" | |||
| } | |||
| fi || exit 1 | |||
| trap '' 0 | |||
| fi | |||
| done | |||
| # Local variables: | |||
| # eval: (add-hook 'before-save-hook 'time-stamp) | |||
| # time-stamp-start: "scriptversion=" | |||
| # time-stamp-format: "%:y-%02m-%02d.%02H" | |||
| # time-stamp-time-zone: "UTC0" | |||
| # time-stamp-end: "; # UTC" | |||
| # End: | |||
| @@ -0,0 +1,215 @@ | |||
| #! /bin/sh | |||
| # Common wrapper for a few potentially missing GNU programs. | |||
| scriptversion=2018-03-07.03; # UTC | |||
| # Copyright (C) 1996-2018 Free Software Foundation, Inc. | |||
| # Originally written by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996. | |||
| # This program is free software; you can redistribute it and/or modify | |||
| # it under the terms of the GNU General Public License as published by | |||
| # the Free Software Foundation; either version 2, or (at your option) | |||
| # any later version. | |||
| # This program is distributed in the hope that it will be useful, | |||
| # but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
| # GNU General Public License for more details. | |||
| # You should have received a copy of the GNU General Public License | |||
| # along with this program. If not, see <https://www.gnu.org/licenses/>. | |||
| # As a special exception to the GNU General Public License, if you | |||
| # distribute this file as part of a program that contains a | |||
| # configuration script generated by Autoconf, you may include it under | |||
| # the same distribution terms that you use for the rest of that program. | |||
| if test $# -eq 0; then | |||
| echo 1>&2 "Try '$0 --help' for more information" | |||
| exit 1 | |||
| fi | |||
| case $1 in | |||
| --is-lightweight) | |||
| # Used by our autoconf macros to check whether the available missing | |||
| # script is modern enough. | |||
| exit 0 | |||
| ;; | |||
| --run) | |||
| # Back-compat with the calling convention used by older automake. | |||
| shift | |||
| ;; | |||
| -h|--h|--he|--hel|--help) | |||
| echo "\ | |||
| $0 [OPTION]... PROGRAM [ARGUMENT]... | |||
| Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due | |||
| to PROGRAM being missing or too old. | |||
| Options: | |||
| -h, --help display this help and exit | |||
| -v, --version output version information and exit | |||
| Supported PROGRAM values: | |||
| aclocal autoconf autoheader autom4te automake makeinfo | |||
| bison yacc flex lex help2man | |||
| Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and | |||
| 'g' are ignored when checking the name. | |||
| Send bug reports to <bug-automake@gnu.org>." | |||
| exit $? | |||
| ;; | |||
| -v|--v|--ve|--ver|--vers|--versi|--versio|--version) | |||
| echo "missing $scriptversion (GNU Automake)" | |||
| exit $? | |||
| ;; | |||
| -*) | |||
| echo 1>&2 "$0: unknown '$1' option" | |||
| echo 1>&2 "Try '$0 --help' for more information" | |||
| exit 1 | |||
| ;; | |||
| esac | |||
| # Run the given program, remember its exit status. | |||
| "$@"; st=$? | |||
| # If it succeeded, we are done. | |||
| test $st -eq 0 && exit 0 | |||
| # Also exit now if we it failed (or wasn't found), and '--version' was | |||
| # passed; such an option is passed most likely to detect whether the | |||
| # program is present and works. | |||
| case $2 in --version|--help) exit $st;; esac | |||
| # Exit code 63 means version mismatch. This often happens when the user | |||
| # tries to use an ancient version of a tool on a file that requires a | |||
| # minimum version. | |||
| if test $st -eq 63; then | |||
| msg="probably too old" | |||
| elif test $st -eq 127; then | |||
| # Program was missing. | |||
| msg="missing on your system" | |||
| else | |||
| # Program was found and executed, but failed. Give up. | |||
| exit $st | |||
| fi | |||
| perl_URL=https://www.perl.org/ | |||
| flex_URL=https://github.com/westes/flex | |||
| gnu_software_URL=https://www.gnu.org/software | |||
| program_details () | |||
| { | |||
| case $1 in | |||
| aclocal|automake) | |||
| echo "The '$1' program is part of the GNU Automake package:" | |||
| echo "<$gnu_software_URL/automake>" | |||
| echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" | |||
| echo "<$gnu_software_URL/autoconf>" | |||
| echo "<$gnu_software_URL/m4/>" | |||
| echo "<$perl_URL>" | |||
| ;; | |||
| autoconf|autom4te|autoheader) | |||
| echo "The '$1' program is part of the GNU Autoconf package:" | |||
| echo "<$gnu_software_URL/autoconf/>" | |||
| echo "It also requires GNU m4 and Perl in order to run:" | |||
| echo "<$gnu_software_URL/m4/>" | |||
| echo "<$perl_URL>" | |||
| ;; | |||
| esac | |||
| } | |||
| give_advice () | |||
| { | |||
| # Normalize program name to check for. | |||
| normalized_program=`echo "$1" | sed ' | |||
| s/^gnu-//; t | |||
| s/^gnu//; t | |||
| s/^g//; t'` | |||
| printf '%s\n' "'$1' is $msg." | |||
| configure_deps="'configure.ac' or m4 files included by 'configure.ac'" | |||
| case $normalized_program in | |||
| autoconf*) | |||
| echo "You should only need it if you modified 'configure.ac'," | |||
| echo "or m4 files included by it." | |||
| program_details 'autoconf' | |||
| ;; | |||
| autoheader*) | |||
| echo "You should only need it if you modified 'acconfig.h' or" | |||
| echo "$configure_deps." | |||
| program_details 'autoheader' | |||
| ;; | |||
| automake*) | |||
| echo "You should only need it if you modified 'Makefile.am' or" | |||
| echo "$configure_deps." | |||
| program_details 'automake' | |||
| ;; | |||
| aclocal*) | |||
| echo "You should only need it if you modified 'acinclude.m4' or" | |||
| echo "$configure_deps." | |||
| program_details 'aclocal' | |||
| ;; | |||
| autom4te*) | |||
| echo "You might have modified some maintainer files that require" | |||
| echo "the 'autom4te' program to be rebuilt." | |||
| program_details 'autom4te' | |||
| ;; | |||
| bison*|yacc*) | |||
| echo "You should only need it if you modified a '.y' file." | |||
| echo "You may want to install the GNU Bison package:" | |||
| echo "<$gnu_software_URL/bison/>" | |||
| ;; | |||
| lex*|flex*) | |||
| echo "You should only need it if you modified a '.l' file." | |||
| echo "You may want to install the Fast Lexical Analyzer package:" | |||
| echo "<$flex_URL>" | |||
| ;; | |||
| help2man*) | |||
| echo "You should only need it if you modified a dependency" \ | |||
| "of a man page." | |||
| echo "You may want to install the GNU Help2man package:" | |||
| echo "<$gnu_software_URL/help2man/>" | |||
| ;; | |||
| makeinfo*) | |||
| echo "You should only need it if you modified a '.texi' file, or" | |||
| echo "any other file indirectly affecting the aspect of the manual." | |||
| echo "You might want to install the Texinfo package:" | |||
| echo "<$gnu_software_URL/texinfo/>" | |||
| echo "The spurious makeinfo call might also be the consequence of" | |||
| echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" | |||
| echo "want to install GNU make:" | |||
| echo "<$gnu_software_URL/make/>" | |||
| ;; | |||
| *) | |||
| echo "You might have modified some files without having the proper" | |||
| echo "tools for further handling them. Check the 'README' file, it" | |||
| echo "often tells you about the needed prerequisites for installing" | |||
| echo "this package. You may also peek at any GNU archive site, in" | |||
| echo "case some other package contains this missing '$1' program." | |||
| ;; | |||
| esac | |||
| } | |||
| give_advice "$1" | sed -e '1s/^/WARNING: /' \ | |||
| -e '2,$s/^/ /' >&2 | |||
| # Propagate the correct exit status (expected to be 127 for a program | |||
| # not found, 63 for a program that failed due to version mismatch). | |||
| exit $st | |||
| # Local variables: | |||
| # eval: (add-hook 'before-save-hook 'time-stamp) | |||
| # time-stamp-start: "scriptversion=" | |||
| # time-stamp-format: "%:y-%02m-%02d.%02H" | |||
| # time-stamp-time-zone: "UTC0" | |||
| # time-stamp-end: "; # UTC" | |||
| # End: | |||
| @@ -0,0 +1,12 @@ | |||
| ###################################### | |||
| # Makefile.am for septime project # | |||
| ###################################### | |||
| bin_PROGRAMS = septime | |||
| septime_SOURCES = scannet.c debug.h \ | |||
| gen_t3.h gen_ypt.h \ | |||
| gesip.c gesip.h \ | |||
| lich.c lich.h \ | |||
| comsh.c comsh.h \ | |||
| trace.c trace.h | |||
| @@ -0,0 +1,604 @@ | |||
| # Makefile.in generated by automake 1.16.1 from Makefile.am. | |||
| # @configure_input@ | |||
| # Copyright (C) 1994-2018 Free Software Foundation, Inc. | |||
| # This Makefile.in is free software; the Free Software Foundation | |||
| # gives unlimited permission to copy and/or distribute it, | |||
| # with or without modifications, as long as this notice is preserved. | |||
| # This program is distributed in the hope that it will be useful, | |||
| # but WITHOUT ANY WARRANTY, to the extent permitted by law; without | |||
| # even the implied warranty of MERCHANTABILITY or FITNESS FOR A | |||
| # PARTICULAR PURPOSE. | |||
| @SET_MAKE@ | |||
| ###################################### | |||
| # Makefile.am for septime project # | |||
| ###################################### | |||
| VPATH = @srcdir@ | |||
| am__is_gnu_make = { \ | |||
| if test -z '$(MAKELEVEL)'; then \ | |||
| false; \ | |||
| elif test -n '$(MAKE_HOST)'; then \ | |||
| true; \ | |||
| elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ | |||
| true; \ | |||
| else \ | |||
| false; \ | |||
| fi; \ | |||
| } | |||
| am__make_running_with_option = \ | |||
| case $${target_option-} in \ | |||
| ?) ;; \ | |||
| *) echo "am__make_running_with_option: internal error: invalid" \ | |||
| "target option '$${target_option-}' specified" >&2; \ | |||
| exit 1;; \ | |||
| esac; \ | |||
| has_opt=no; \ | |||
| sane_makeflags=$$MAKEFLAGS; \ | |||
| if $(am__is_gnu_make); then \ | |||
| sane_makeflags=$$MFLAGS; \ | |||
| else \ | |||
| case $$MAKEFLAGS in \ | |||
| *\\[\ \ ]*) \ | |||
| bs=\\; \ | |||
| sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | |||
| | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ | |||
| esac; \ | |||
| fi; \ | |||
| skip_next=no; \ | |||
| strip_trailopt () \ | |||
| { \ | |||
| flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ | |||
| }; \ | |||
| for flg in $$sane_makeflags; do \ | |||
| test $$skip_next = yes && { skip_next=no; continue; }; \ | |||
| case $$flg in \ | |||
| *=*|--*) continue;; \ | |||
| -*I) strip_trailopt 'I'; skip_next=yes;; \ | |||
| -*I?*) strip_trailopt 'I';; \ | |||
| -*O) strip_trailopt 'O'; skip_next=yes;; \ | |||
| -*O?*) strip_trailopt 'O';; \ | |||
| -*l) strip_trailopt 'l'; skip_next=yes;; \ | |||
| -*l?*) strip_trailopt 'l';; \ | |||
| -[dEDm]) skip_next=yes;; \ | |||
| -[JT]) skip_next=yes;; \ | |||
| esac; \ | |||
| case $$flg in \ | |||
| *$$target_option*) has_opt=yes; break;; \ | |||
| esac; \ | |||
| done; \ | |||
| test $$has_opt = yes | |||
| am__make_dryrun = (target_option=n; $(am__make_running_with_option)) | |||
| am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) | |||
| pkgdatadir = $(datadir)/@PACKAGE@ | |||
| pkgincludedir = $(includedir)/@PACKAGE@ | |||
| pkglibdir = $(libdir)/@PACKAGE@ | |||
| pkglibexecdir = $(libexecdir)/@PACKAGE@ | |||
| am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd | |||
| install_sh_DATA = $(install_sh) -c -m 644 | |||
| install_sh_PROGRAM = $(install_sh) -c | |||
| install_sh_SCRIPT = $(install_sh) -c | |||
| INSTALL_HEADER = $(INSTALL_DATA) | |||
| transform = $(program_transform_name) | |||
| NORMAL_INSTALL = : | |||
| PRE_INSTALL = : | |||
| POST_INSTALL = : | |||
| NORMAL_UNINSTALL = : | |||
| PRE_UNINSTALL = : | |||
| POST_UNINSTALL = : | |||
| bin_PROGRAMS = septime$(EXEEXT) | |||
| subdir = src | |||
| ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 | |||
| am__aclocal_m4_deps = $(top_srcdir)/configure.ac | |||
| am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ | |||
| $(ACLOCAL_M4) | |||
| DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) | |||
| mkinstalldirs = $(install_sh) -d | |||
| CONFIG_HEADER = $(top_builddir)/config.h | |||
| CONFIG_CLEAN_FILES = | |||
| CONFIG_CLEAN_VPATH_FILES = | |||
| am__installdirs = "$(DESTDIR)$(bindir)" | |||
| PROGRAMS = $(bin_PROGRAMS) | |||
| am_septime_OBJECTS = scannet.$(OBJEXT) gesip.$(OBJEXT) lich.$(OBJEXT) \ | |||
| comsh.$(OBJEXT) trace.$(OBJEXT) | |||
| septime_OBJECTS = $(am_septime_OBJECTS) | |||
| septime_LDADD = $(LDADD) | |||
| AM_V_P = $(am__v_P_@AM_V@) | |||
| am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) | |||
| am__v_P_0 = false | |||
| am__v_P_1 = : | |||
| AM_V_GEN = $(am__v_GEN_@AM_V@) | |||
| am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) | |||
| am__v_GEN_0 = @echo " GEN " $@; | |||
| am__v_GEN_1 = | |||
| AM_V_at = $(am__v_at_@AM_V@) | |||
| am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) | |||
| am__v_at_0 = @ | |||
| am__v_at_1 = | |||
| DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) | |||
| depcomp = $(SHELL) $(top_srcdir)/depcomp | |||
| am__maybe_remake_depfiles = depfiles | |||
| am__depfiles_remade = ./$(DEPDIR)/comsh.Po ./$(DEPDIR)/gesip.Po \ | |||
| ./$(DEPDIR)/lich.Po ./$(DEPDIR)/scannet.Po \ | |||
| ./$(DEPDIR)/trace.Po | |||
| am__mv = mv -f | |||
| COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ | |||
| $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) | |||
| AM_V_CC = $(am__v_CC_@AM_V@) | |||
| am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) | |||
| am__v_CC_0 = @echo " CC " $@; | |||
| am__v_CC_1 = | |||
| CCLD = $(CC) | |||
| LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ | |||
| AM_V_CCLD = $(am__v_CCLD_@AM_V@) | |||
| am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) | |||
| am__v_CCLD_0 = @echo " CCLD " $@; | |||
| am__v_CCLD_1 = | |||
| SOURCES = $(septime_SOURCES) | |||
| DIST_SOURCES = $(septime_SOURCES) | |||
| am__can_run_installinfo = \ | |||
| case $$AM_UPDATE_INFO_DIR in \ | |||
| n|no|NO) false;; \ | |||
| *) (install-info --version) >/dev/null 2>&1;; \ | |||
| esac | |||
| am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) | |||
| # Read a list of newline-separated strings from the standard input, | |||
| # and print each of them once, without duplicates. Input order is | |||
| # *not* preserved. | |||
| am__uniquify_input = $(AWK) '\ | |||
| BEGIN { nonempty = 0; } \ | |||
| { items[$$0] = 1; nonempty = 1; } \ | |||
| END { if (nonempty) { for (i in items) print i; }; } \ | |||
| ' | |||
| # Make sure the list of sources is unique. This is necessary because, | |||
| # e.g., the same source file might be shared among _SOURCES variables | |||
| # for different programs/libraries. | |||
| am__define_uniq_tagged_files = \ | |||
| list='$(am__tagged_files)'; \ | |||
| unique=`for i in $$list; do \ | |||
| if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ | |||
| done | $(am__uniquify_input)` | |||
| ETAGS = etags | |||
| CTAGS = ctags | |||
| am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp | |||
| DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) | |||
| ACLOCAL = @ACLOCAL@ | |||
| ADMCOM = @ADMCOM@ | |||
| ADMCOM2 = @ADMCOM2@ | |||
| ADMCOM3 = @ADMCOM3@ | |||
| ADMCOM4 = @ADMCOM4@ | |||
| AMTAR = @AMTAR@ | |||
| AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ | |||
| AUTOCONF = @AUTOCONF@ | |||
| AUTOHEADER = @AUTOHEADER@ | |||
| AUTOMAKE = @AUTOMAKE@ | |||
| AWK = @AWK@ | |||
| CC = @CC@ | |||
| CCDEPMODE = @CCDEPMODE@ | |||
| CFLAGS = @CFLAGS@ | |||
| COM1 = @COM1@ | |||
| COM2 = @COM2@ | |||
| COM3 = @COM3@ | |||
| CPP = @CPP@ | |||
| CPPFLAGS = @CPPFLAGS@ | |||
| CYGPATH_W = @CYGPATH_W@ | |||
| DEFS = @DEFS@ | |||
| DEPDIR = @DEPDIR@ | |||
| ECHO_C = @ECHO_C@ | |||
| ECHO_N = @ECHO_N@ | |||
| ECHO_T = @ECHO_T@ | |||
| EGREP = @EGREP@ | |||
| EXEEXT = @EXEEXT@ | |||
| GREP = @GREP@ | |||
| INSTALL = @INSTALL@ | |||
| INSTALL_DATA = @INSTALL_DATA@ | |||
| INSTALL_PROGRAM = @INSTALL_PROGRAM@ | |||
| INSTALL_SCRIPT = @INSTALL_SCRIPT@ | |||
| INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ | |||
| LDFLAGS = @LDFLAGS@ | |||
| LIBOBJS = @LIBOBJS@ | |||
| LIBS = @LIBS@ | |||
| LTLIBOBJS = @LTLIBOBJS@ | |||
| MAKEINFO = @MAKEINFO@ | |||
| MKDIR_P = @MKDIR_P@ | |||
| OBJEXT = @OBJEXT@ | |||
| PACKAGE = @PACKAGE@ | |||
| PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ | |||
| PACKAGE_NAME = @PACKAGE_NAME@ | |||
| PACKAGE_STRING = @PACKAGE_STRING@ | |||
| PACKAGE_TARNAME = @PACKAGE_TARNAME@ | |||
| PACKAGE_URL = @PACKAGE_URL@ | |||
| PACKAGE_VERSION = @PACKAGE_VERSION@ | |||
| PATH_SEPARATOR = @PATH_SEPARATOR@ | |||
| SED = @SED@ | |||
| SET_MAKE = @SET_MAKE@ | |||
| SHELL = @SHELL@ | |||
| STRIP = @STRIP@ | |||
| VERSION = @VERSION@ | |||
| abs_builddir = @abs_builddir@ | |||
| abs_srcdir = @abs_srcdir@ | |||
| abs_top_builddir = @abs_top_builddir@ | |||
| abs_top_srcdir = @abs_top_srcdir@ | |||
| ac_ct_CC = @ac_ct_CC@ | |||
| am__include = @am__include@ | |||
| am__leading_dot = @am__leading_dot@ | |||
| am__quote = @am__quote@ | |||
| am__tar = @am__tar@ | |||
| am__untar = @am__untar@ | |||
| bindir = @bindir@ | |||
| build_alias = @build_alias@ | |||
| builddir = @builddir@ | |||
| datadir = @datadir@ | |||
| datarootdir = @datarootdir@ | |||
| docdir = @docdir@ | |||
| dvidir = @dvidir@ | |||
| exec_prefix = @exec_prefix@ | |||
| host_alias = @host_alias@ | |||
| htmldir = @htmldir@ | |||
| includedir = @includedir@ | |||
| infodir = @infodir@ | |||
| install_sh = @install_sh@ | |||
| libdir = @libdir@ | |||
| libexecdir = @libexecdir@ | |||
| localedir = @localedir@ | |||
| localstatedir = @localstatedir@ | |||
| mandir = @mandir@ | |||
| mkdir_p = @mkdir_p@ | |||
| oldincludedir = @oldincludedir@ | |||
| pdfdir = @pdfdir@ | |||
| prefix = @prefix@ | |||
| program_transform_name = @program_transform_name@ | |||
| psdir = @psdir@ | |||
| runstatedir = @runstatedir@ | |||
| sbindir = @sbindir@ | |||
| sharedstatedir = @sharedstatedir@ | |||
| srcdir = @srcdir@ | |||
| sysconfdir = @sysconfdir@ | |||
| target_alias = @target_alias@ | |||
| top_build_prefix = @top_build_prefix@ | |||
| top_builddir = @top_builddir@ | |||
| top_srcdir = @top_srcdir@ | |||
| septime_SOURCES = scannet.c debug.h \ | |||
| gen_t3.h gen_ypt.h \ | |||
| gesip.c gesip.h \ | |||
| lich.c lich.h \ | |||
| comsh.c comsh.h \ | |||
| trace.c trace.h | |||
| all: all-am | |||
| .SUFFIXES: | |||
| .SUFFIXES: .c .o .obj | |||
| $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) | |||
| @for dep in $?; do \ | |||
| case '$(am__configure_deps)' in \ | |||
| *$$dep*) \ | |||
| ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ | |||
| && { if test -f $@; then exit 0; else break; fi; }; \ | |||
| exit 1;; \ | |||
| esac; \ | |||
| done; \ | |||
| echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ | |||
| $(am__cd) $(top_srcdir) && \ | |||
| $(AUTOMAKE) --gnu src/Makefile | |||
| Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status | |||
| @case '$?' in \ | |||
| *config.status*) \ | |||
| cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ | |||
| *) \ | |||
| echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ | |||
| cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ | |||
| esac; | |||
| $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) | |||
| cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh | |||
| $(top_srcdir)/configure: $(am__configure_deps) | |||
| cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh | |||
| $(ACLOCAL_M4): $(am__aclocal_m4_deps) | |||
| cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh | |||
| $(am__aclocal_m4_deps): | |||
| install-binPROGRAMS: $(bin_PROGRAMS) | |||
| @$(NORMAL_INSTALL) | |||
| @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ | |||
| if test -n "$$list"; then \ | |||
| echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ | |||
| $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ | |||
| fi; \ | |||
| for p in $$list; do echo "$$p $$p"; done | \ | |||
| sed 's/$(EXEEXT)$$//' | \ | |||
| while read p p1; do if test -f $$p \ | |||
| ; then echo "$$p"; echo "$$p"; else :; fi; \ | |||
| done | \ | |||
| sed -e 'p;s,.*/,,;n;h' \ | |||
| -e 's|.*|.|' \ | |||
| -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ | |||
| sed 'N;N;N;s,\n, ,g' | \ | |||
| $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ | |||
| { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ | |||
| if ($$2 == $$4) files[d] = files[d] " " $$1; \ | |||
| else { print "f", $$3 "/" $$4, $$1; } } \ | |||
| END { for (d in files) print "f", d, files[d] }' | \ | |||
| while read type dir files; do \ | |||
| if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ | |||
| test -z "$$files" || { \ | |||
| echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ | |||
| $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ | |||
| } \ | |||
| ; done | |||
| uninstall-binPROGRAMS: | |||
| @$(NORMAL_UNINSTALL) | |||
| @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ | |||
| files=`for p in $$list; do echo "$$p"; done | \ | |||
| sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ | |||
| -e 's/$$/$(EXEEXT)/' \ | |||
| `; \ | |||
| test -n "$$list" || exit 0; \ | |||
| echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ | |||
| cd "$(DESTDIR)$(bindir)" && rm -f $$files | |||
| clean-binPROGRAMS: | |||
| -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) | |||
| septime$(EXEEXT): $(septime_OBJECTS) $(septime_DEPENDENCIES) $(EXTRA_septime_DEPENDENCIES) | |||
| @rm -f septime$(EXEEXT) | |||
| $(AM_V_CCLD)$(LINK) $(septime_OBJECTS) $(septime_LDADD) $(LIBS) | |||
| mostlyclean-compile: | |||
| -rm -f *.$(OBJEXT) | |||
| distclean-compile: | |||
| -rm -f *.tab.c | |||
| @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/comsh.Po@am__quote@ # am--include-marker | |||
| @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gesip.Po@am__quote@ # am--include-marker | |||
| @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lich.Po@am__quote@ # am--include-marker | |||
| @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scannet.Po@am__quote@ # am--include-marker | |||
| @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/trace.Po@am__quote@ # am--include-marker | |||
| $(am__depfiles_remade): | |||
| @$(MKDIR_P) $(@D) | |||
| @echo '# dummy' >$@-t && $(am__mv) $@-t $@ | |||
| am--depfiles: $(am__depfiles_remade) | |||
| .c.o: | |||
| @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< | |||
| @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po | |||
| @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ | |||
| @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ | |||
| @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< | |||
| .c.obj: | |||
| @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` | |||
| @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po | |||
| @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ | |||
| @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ | |||
| @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` | |||
| ID: $(am__tagged_files) | |||
| $(am__define_uniq_tagged_files); mkid -fID $$unique | |||
| tags: tags-am | |||
| TAGS: tags | |||
| tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) | |||
| set x; \ | |||
| here=`pwd`; \ | |||
| $(am__define_uniq_tagged_files); \ | |||
| shift; \ | |||
| if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ | |||
| test -n "$$unique" || unique=$$empty_fix; \ | |||
| if test $$# -gt 0; then \ | |||
| $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ | |||
| "$$@" $$unique; \ | |||
| else \ | |||
| $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ | |||
| $$unique; \ | |||
| fi; \ | |||
| fi | |||
| ctags: ctags-am | |||
| CTAGS: ctags | |||
| ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) | |||
| $(am__define_uniq_tagged_files); \ | |||
| test -z "$(CTAGS_ARGS)$$unique" \ | |||
| || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ | |||
| $$unique | |||
| GTAGS: | |||
| here=`$(am__cd) $(top_builddir) && pwd` \ | |||
| && $(am__cd) $(top_srcdir) \ | |||
| && gtags -i $(GTAGS_ARGS) "$$here" | |||
| cscopelist: cscopelist-am | |||
| cscopelist-am: $(am__tagged_files) | |||
| list='$(am__tagged_files)'; \ | |||
| case "$(srcdir)" in \ | |||
| [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ | |||
| *) sdir=$(subdir)/$(srcdir) ;; \ | |||
| esac; \ | |||
| for i in $$list; do \ | |||
| if test -f "$$i"; then \ | |||
| echo "$(subdir)/$$i"; \ | |||
| else \ | |||
| echo "$$sdir/$$i"; \ | |||
| fi; \ | |||
| done >> $(top_builddir)/cscope.files | |||
| distclean-tags: | |||
| -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags | |||
| distdir: $(BUILT_SOURCES) | |||
| $(MAKE) $(AM_MAKEFLAGS) distdir-am | |||
| distdir-am: $(DISTFILES) | |||
| @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ | |||
| topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ | |||
| list='$(DISTFILES)'; \ | |||
| dist_files=`for file in $$list; do echo $$file; done | \ | |||
| sed -e "s|^$$srcdirstrip/||;t" \ | |||
| -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ | |||
| case $$dist_files in \ | |||
| */*) $(MKDIR_P) `echo "$$dist_files" | \ | |||
| sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ | |||
| sort -u` ;; \ | |||
| esac; \ | |||
| for file in $$dist_files; do \ | |||
| if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ | |||
| if test -d $$d/$$file; then \ | |||
| dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ | |||
| if test -d "$(distdir)/$$file"; then \ | |||
| find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ | |||
| fi; \ | |||
| if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ | |||
| cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ | |||
| find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ | |||
| fi; \ | |||
| cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ | |||
| else \ | |||
| test -f "$(distdir)/$$file" \ | |||
| || cp -p $$d/$$file "$(distdir)/$$file" \ | |||
| || exit 1; \ | |||
| fi; \ | |||
| done | |||
| check-am: all-am | |||
| check: check-am | |||
| all-am: Makefile $(PROGRAMS) | |||
| installdirs: | |||
| for dir in "$(DESTDIR)$(bindir)"; do \ | |||
| test -z "$$dir" || $(MKDIR_P) "$$dir"; \ | |||
| done | |||
| install: install-am | |||
| install-exec: install-exec-am | |||
| install-data: install-data-am | |||
| uninstall: uninstall-am | |||
| install-am: all-am | |||
| @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am | |||
| installcheck: installcheck-am | |||
| install-strip: | |||
| if test -z '$(STRIP)'; then \ | |||
| $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ | |||
| install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ | |||
| install; \ | |||
| else \ | |||
| $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ | |||
| install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ | |||
| "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ | |||
| fi | |||
| mostlyclean-generic: | |||
| clean-generic: | |||
| distclean-generic: | |||
| -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) | |||
| -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) | |||
| maintainer-clean-generic: | |||
| @echo "This command is intended for maintainers to use" | |||
| @echo "it deletes files that may require special tools to rebuild." | |||
| clean: clean-am | |||
| clean-am: clean-binPROGRAMS clean-generic mostlyclean-am | |||
| distclean: distclean-am | |||
| -rm -f ./$(DEPDIR)/comsh.Po | |||
| -rm -f ./$(DEPDIR)/gesip.Po | |||
| -rm -f ./$(DEPDIR)/lich.Po | |||
| -rm -f ./$(DEPDIR)/scannet.Po | |||
| -rm -f ./$(DEPDIR)/trace.Po | |||
| -rm -f Makefile | |||
| distclean-am: clean-am distclean-compile distclean-generic \ | |||
| distclean-tags | |||
| dvi: dvi-am | |||
| dvi-am: | |||
| html: html-am | |||
| html-am: | |||
| info: info-am | |||
| info-am: | |||
| install-data-am: | |||
| install-dvi: install-dvi-am | |||
| install-dvi-am: | |||
| install-exec-am: install-binPROGRAMS | |||
| install-html: install-html-am | |||
| install-html-am: | |||
| install-info: install-info-am | |||
| install-info-am: | |||
| install-man: | |||
| install-pdf: install-pdf-am | |||
| install-pdf-am: | |||
| install-ps: install-ps-am | |||
| install-ps-am: | |||
| installcheck-am: | |||
| maintainer-clean: maintainer-clean-am | |||
| -rm -f ./$(DEPDIR)/comsh.Po | |||
| -rm -f ./$(DEPDIR)/gesip.Po | |||
| -rm -f ./$(DEPDIR)/lich.Po | |||
| -rm -f ./$(DEPDIR)/scannet.Po | |||
| -rm -f ./$(DEPDIR)/trace.Po | |||
| -rm -f Makefile | |||
| maintainer-clean-am: distclean-am maintainer-clean-generic | |||
| mostlyclean: mostlyclean-am | |||
| mostlyclean-am: mostlyclean-compile mostlyclean-generic | |||
| pdf: pdf-am | |||
| pdf-am: | |||
| ps: ps-am | |||
| ps-am: | |||
| uninstall-am: uninstall-binPROGRAMS | |||
| .MAKE: install-am install-strip | |||
| .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ | |||
| clean-binPROGRAMS clean-generic cscopelist-am ctags ctags-am \ | |||
| distclean distclean-compile distclean-generic distclean-tags \ | |||
| distdir dvi dvi-am html html-am info info-am install \ | |||
| install-am install-binPROGRAMS install-data install-data-am \ | |||
| install-dvi install-dvi-am install-exec install-exec-am \ | |||
| install-html install-html-am install-info install-info-am \ | |||
| install-man install-pdf install-pdf-am install-ps \ | |||
| install-ps-am install-strip installcheck installcheck-am \ | |||
| installdirs maintainer-clean maintainer-clean-generic \ | |||
| mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \ | |||
| ps ps-am tags tags-am uninstall uninstall-am \ | |||
| uninstall-binPROGRAMS | |||
| .PRECIOUS: Makefile | |||
| # Tell versions [3.59,3.63) of GNU make to not export all variables. | |||
| # Otherwise a system limit (for SysV at least) may be exceeded. | |||
| .NOEXPORT: | |||
| @@ -0,0 +1,324 @@ | |||
| /******************************************************************* | |||
| Copyright (C) 2011-2024 Patrick H. E. Foubet - S.E.R.I.A.N.E. | |||
| This program is free software: you can redistribute it and/or modify | |||
| it under the terms of the GNU General Public License as published by | |||
| the Free Software Foundation, either version 3 of the License, or any | |||
| later version. | |||
| This program is distributed in the hope that it will be useful, | |||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | |||
| See the GNU General Public License for more details. | |||
| You should have received a copy of the GNU General Public License | |||
| along with this program. If not, see <http://www.gnu.org/licenses/> | |||
| *******************************************************************/ | |||
| /* fonctions d'execution de commandes externes */ | |||
| #include <stdio.h> | |||
| #include <stdlib.h> | |||
| #include <unistd.h> | |||
| #include <signal.h> | |||
| #include <fcntl.h> | |||
| #include <sys/wait.h> | |||
| #include <string.h> | |||
| #include <errno.h> | |||
| #include "trace.h" | |||
| #include "comsh.h" | |||
| #include "lich.h" | |||
| #include "debug.h" | |||
| /* variables globales maj dans main() */ | |||
| pid_t pidG; | |||
| char * NPROG; | |||
| void prAube(void) | |||
| { | |||
| static char *c; | |||
| static int i=0; | |||
| c=Y(f03); | |||
| printf(Y(f04),c[i++]); | |||
| fflush(stdout); | |||
| if (i==4) i=0; | |||
| } | |||
| void Pignore(char * m) { printf(Y(a01),m); } | |||
| #define LRES 100 | |||
| static char * comshr(char *b) | |||
| { | |||
| pid_t pid; | |||
| int n, ret, pic[2]; | |||
| static char res[LRES]; | |||
| char *d,*f; | |||
| if (pipe(pic) < 0) { | |||
| perror(Y(p01)); return NULL; | |||
| } | |||
| fcntl(pic[0], F_SETFL, O_NONBLOCK); | |||
| if ((pid = fork()) < 0) { | |||
| perror(Y(p02)); return NULL; | |||
| } | |||
| if (pid == 0) { | |||
| close(pic[0]); | |||
| fcntl(pic[1], F_SETFL, O_NONBLOCK); | |||
| dup2(pic[1],1); | |||
| signal(SIGINT,SIG_IGN); | |||
| execl(Y(c02), Y(k00), "-c", b, (char*)0); | |||
| perror(Y(p03)); | |||
| printf(Y(k10)); | |||
| exit(0); | |||
| } | |||
| close(pic[1]); | |||
| d=res; | |||
| f=d+LRES; | |||
| while (d < f) { | |||
| if ((n=read(pic[0],d,1)) < 1) { | |||
| if (errno == EAGAIN) continue; | |||
| else break; | |||
| } | |||
| if (*d == '\n') break; | |||
| d++; | |||
| } | |||
| if (d==f) { | |||
| d--; | |||
| while (*d != '\n') if (read(pic[0],d,1) != 1) break; | |||
| } | |||
| *d = '\0'; | |||
| kill(pid,SIGKILL); | |||
| waitpid(pid,&ret,0); | |||
| close(pic[0]); | |||
| return res; | |||
| } | |||
| /* fcts utilisant comshr */ | |||
| char * comWhois(char * ip) | |||
| { | |||
| char a[50], b[150],*d; | |||
| strcpy(a,ip); | |||
| d=strrchr(a,(int)'/'); | |||
| if (d != NULL) *d='\0'; | |||
| sprintf(b,Y(f38), Y(c03), a, Y(c04)); | |||
| return comshr(b); | |||
| } | |||
| int comsh(char *com,int mode) | |||
| { | |||
| pid_t pid; | |||
| int ret; | |||
| Tdebug(Y(t09),com); | |||
| if ((pid = fork()) < 0) { | |||
| perror(Y(p04)); return 99; | |||
| } | |||
| if (pid == 0) { | |||
| if (mode & EX_NOOUT) close(1); | |||
| if (mode & EX_NOERR) close(2); | |||
| signal(SIGINT,SIG_IGN); | |||
| execl(Y(c02), Y(k00), "-c", com, (char *)0); | |||
| perror(Y(p05)); exit(98); | |||
| } | |||
| if (mode & EX_DUREE) { | |||
| while (waitpid(pid,&ret,WNOHANG) != pid) { | |||
| sleep(1); | |||
| prAube(); | |||
| } | |||
| } else waitpid(pid,&ret,0); | |||
| return WEXITSTATUS(ret); | |||
| } | |||
| int exeComA(char * comm) | |||
| { | |||
| char b[120]; | |||
| sprintf(b,Y(f39),comm); | |||
| return comsh(b,0); | |||
| } | |||
| /* ### fct de MAJ iptables */ | |||
| void razIPT(void) | |||
| { | |||
| char b[90]; | |||
| /* IPv4 */ | |||
| sprintf(b,Y(f40),Y(c05)); | |||
| exeComA(b); | |||
| /* IPv6 */ | |||
| sprintf(b,Y(f40),Y(c06)); | |||
| exeComA(b); | |||
| } | |||
| int initIPT(void) | |||
| { | |||
| int i=0; | |||
| char b[90]; | |||
| razIPT(); | |||
| /* IPv4 */ | |||
| sprintf(b,Y(f41),Y(c05),Y(k01)); | |||
| if (exeComA(b)) { | |||
| sprintf(b,Y(f42),Y(c05),Y(k01)); | |||
| i += exeComA(b); | |||
| } | |||
| sprintf(b,Y(f43),Y(c05),Y(k03),Y(k01)); | |||
| i += exeComA(b); | |||
| /* IPv6 */ | |||
| sprintf(b,Y(f41),Y(c06),Y(k02)); | |||
| if (exeComA(b)) { | |||
| sprintf(b,Y(f42),Y(c06),Y(k02)); | |||
| i += exeComA(b); | |||
| } | |||
| sprintf(b,Y(f43),Y(c06),Y(k03),Y(k02)); | |||
| i += exeComA(b); | |||
| return i; | |||
| } | |||
| static int isPresentIP(char * comm, char * ip, char * chain) | |||
| { | |||
| char buf[100]; | |||
| sprintf(buf,Y(f44),comm,chain,ip); | |||
| if (exeComA(buf) == 0) return 1; | |||
| return 0; | |||
| } | |||
| /* fct derivees de isPresentIP */ | |||
| int isIPprotegee(int v6, char *ip) | |||
| { | |||
| if (v6) return isPresentIP(Y(c06),ip,Y(k02)); | |||
| else return isPresentIP(Y(c05),ip,Y(k01)); | |||
| } | |||
| int isIPbloquee(int v6, char *ip) | |||
| { | |||
| if (v6) return isPresentIP(Y(c06),ip,Y(k03)); | |||
| else return isPresentIP(Y(c05),ip,Y(k03)); | |||
| } | |||
| static int retireChain(char * comm, char * ip, char * chain, char * jump) | |||
| { | |||
| char buf[100]; | |||
| sprintf(buf,Y(f45),comm,chain, ip, jump); | |||
| return exeComA(buf); | |||
| } | |||
| /* fct derivees de retireChain() */ | |||
| int derejetIP(int v6, char *ip) | |||
| { | |||
| if (v6) return retireChain(Y(c06),ip,Y(k03),Y(k04)); | |||
| else return retireChain(Y(c05),ip,Y(k03),Y(k04)); | |||
| } | |||
| int deprotegeIP(int v6, char *ip) | |||
| { | |||
| if (v6) return retireChain(Y(c06),ip,Y(k02),Y(k05)); | |||
| else return retireChain(Y(c05),ip,Y(k01),Y(k05)); | |||
| } | |||
| static int ajouteChain(char * comm, char * ip, char * chain, char * jump) | |||
| { | |||
| char buf[100]; | |||
| sprintf(buf,Y(f46),comm,chain, ip, jump); | |||
| return exeComA(buf); | |||
| } | |||
| /* fct derivees de ajouteChain() */ | |||
| int rejetIP(int v6, char *ip) | |||
| { | |||
| if (v6) return ajouteChain(Y(c06),ip,Y(k03),Y(k04)); | |||
| else return ajouteChain(Y(c05),ip,Y(k03),Y(k04)); | |||
| } | |||
| int protegeIP(int v6, char *ip) | |||
| { | |||
| if (v6) return ajouteChain(Y(c06),ip,Y(k02),Y(k05)); | |||
| else return ajouteChain(Y(c05),ip,Y(k01),Y(k05)); | |||
| } | |||
| /* commandes interactives */ | |||
| void comFct(int C, int JCTL, char *cmd) | |||
| { | |||
| int code=0; | |||
| char com[200]; | |||
| switch(C) { | |||
| case FCT_COMe: | |||
| if (JCTL) sprintf(com,Y(f05),Y(c01),NPROG,pidG, Y(k08), Y(c14),Y(c07)); | |||
| else sprintf(com,Y(f06),NPROG,pidG, Y(k08), Y(k09),Y(c14),Y(c07)); | |||
| break; | |||
| case FCT_COME: | |||
| if (JCTL) sprintf(com,Y(f07),Y(c01),NPROG,pidG, Y(k11), Y(c15)); | |||
| else sprintf(com,Y(f08),NPROG,pidG, Y(k11), Y(k09),Y(c15)); | |||
| break; | |||
| case FCT_COML: | |||
| if (*(cmd+1) == '\0') { | |||
| if (JCTL) sprintf(com,Y(f09),Y(c01),NPROG, pidG,Y(f13),Y(c15)); | |||
| else sprintf(com,Y(f10),NPROG,pidG, Y(c13),Y(f13),Y(c15)); | |||
| } else { | |||
| if (JCTL) sprintf(com,Y(f11),Y(c01) ,NPROG,pidG,Y(f13),Y(c15),cmd+1); | |||
| else sprintf(com,Y(f12),NPROG,pidG, Y(c13),Y(f13),Y(c15),cmd+1); | |||
| } | |||
| break; | |||
| case FCT_COMl: | |||
| if (*(cmd+1) != '\0') { /* avec parametre */ | |||
| if ((*(cmd+1) == '=') && (*(cmd+2) == '\0')) { | |||
| printf(Y(e06)); | |||
| return; | |||
| } | |||
| if ((*(cmd+1) == '=') && (*(cmd+2) != '\0')) { /* script + param */ | |||
| sprintf(com,Y(f14),NPROG,pidG,cmd+2,pidG); | |||
| comsh(com,0); | |||
| sprintf(com,Y(f15),pidG,pidG); | |||
| } else { | |||
| if (JCTL) | |||
| sprintf(com,Y(f16),Y(c01),NPROG,pidG, cmd+1,Y(f32),Y(c16)); | |||
| else sprintf(com,Y(f17),NPROG,pidG,cmd+1, Y(c13),Y(f32),Y(c16)); | |||
| } | |||
| } else { | |||
| if (JCTL)sprintf(com,Y(f18),Y(c01),NPROG,pidG, Y(f32),Y(c16)); | |||
| else sprintf(com,Y(f19),NPROG,pidG, Y(c13),Y(f32),Y(c16)); | |||
| } | |||
| break; | |||
| case FCT_COMinf: | |||
| if (JCTL) sprintf(com,Y(f20),Y(c01),NPROG,pidG, Y(f33),Y(c17),Y(c09)); | |||
| else sprintf(com,Y(f21),NPROG,pidG, Y(c13),Y(f34),Y(c17),Y(c09)); | |||
| break; | |||
| case FCT_COMsup: | |||
| if (JCTL) sprintf(com,Y(f22),Y(c01),NPROG,pidG, Y(f35),Y(c17),Y(c09)); | |||
| else sprintf(com,Y(f23),NPROG,pidG, Y(c13),Y(f36),Y(c17),Y(c09)); | |||
| break; | |||
| case FCT_COMr: | |||
| sprintf(com,Y(f24),Y(c05),Y(k03),Y(k06),Y(c18),Y(c10),Y(c11)); | |||
| if (*(cmd+1) != '\0') { | |||
| if ((*(cmd+1) != '?') || (*(cmd+2) != '\0')) Pignore(cmd+1); | |||
| else sprintf(com,Y(f25),Y(c05),Y(k03),Y(k06),Y(c18),Y(c07)); | |||
| } | |||
| code = EX_NOERR|EX_DUREE; | |||
| break; | |||
| case FCT_COMR: | |||
| sprintf(com,Y(f26),Y(c06),Y(k06),Y(c19),Y(c08),Y(c12)); | |||
| if (*(cmd+1) != '\0') { | |||
| if ((*(cmd+1) != '?') || (*(cmd+2) != '\0')) Pignore(cmd+1); | |||
| else sprintf(com,Y(f27),Y(c06),Y(k06),Y(c19),Y(c07)); | |||
| } | |||
| code = EX_NOERR|EX_DUREE; | |||
| break; | |||
| case FCT_COMv: | |||
| sprintf(com,Y(f28),Y(c05),Y(k01),Y(k07),Y(c18),Y(c10),Y(c11)); | |||
| if (*(cmd+1) != '\0') { | |||
| if ((*(cmd+1) != '?') || (*(cmd+2) != '\0')) Pignore(cmd+1); | |||
| else sprintf(com,Y(f29),Y(c05),Y(k01),Y(k07),Y(c18),Y(c07)); | |||
| } | |||
| code = EX_NOERR|EX_DUREE; | |||
| break; | |||
| case FCT_COMV: | |||
| sprintf(com,Y(f30),Y(c06),Y(k02),Y(k07),Y(c19),Y(c08),Y(c12)); | |||
| if (*(cmd+1) != '\0') { | |||
| if ((*(cmd+1) != '?') || (*(cmd+2) != '\0')) Pignore(cmd+1); | |||
| else sprintf(com,Y(f31),Y(c06),Y(k02),Y(k07),Y(c19),Y(c07)); | |||
| } | |||
| code = EX_NOERR|EX_DUREE; | |||
| break; | |||
| default: | |||
| printf(Y(a02),C); | |||
| return; | |||
| } | |||
| if (DebugOn) printf(Y(f37),com); | |||
| comsh(com,code); | |||
| } | |||
| @@ -0,0 +1,55 @@ | |||
| /******************************************************************* | |||
| Copyright (C) 2011-2024 Patrick H. E. Foubet - S.E.R.I.A.N.E. | |||
| This program is free software: you can redistribute it and/or modify | |||
| it under the terms of the GNU General Public License as published by | |||
| the Free Software Foundation, either version 3 of the License, or any | |||
| later version. | |||
| This program is distributed in the hope that it will be useful, | |||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | |||
| See the GNU General Public License for more details. | |||
| You should have received a copy of the GNU General Public License | |||
| along with this program. If not, see <http://www.gnu.org/licenses/> | |||
| *******************************************************************/ | |||
| /* fonctions d'execution de commandes externes */ | |||
| #define EX_NOOUT 1 | |||
| #define EX_NOERR 2 | |||
| #define EX_DUREE 4 | |||
| #define EX_SILENT EX_NOOUT|EX_NOERR | |||
| #define FCT_COMe 0 | |||
| #define FCT_COME 1 | |||
| #define FCT_COML 2 | |||
| #define FCT_COMl 3 | |||
| #define FCT_COMr 4 | |||
| #define FCT_COMR 5 | |||
| #define FCT_COMv 6 | |||
| #define FCT_COMV 7 | |||
| #define FCT_COMinf 8 | |||
| #define FCT_COMsup 9 | |||
| /* Var. globales */ | |||
| extern pid_t pidG; | |||
| extern char * NPROG; | |||
| extern void prAube(void); | |||
| extern void Pignore(char *m); | |||
| extern int comsh(char *com,int mode); | |||
| extern char * comWhois(char *ip); | |||
| extern int exeComA(char *c); | |||
| extern void razIPT(void); | |||
| extern int initIPT(void); | |||
| extern int isIPprotegee(int v6, char *ip); | |||
| extern int isIPbloquee(int v6, char *ip); | |||
| extern int rejetIP(int v6, char *ip); | |||
| extern int protegeIP(int v6, char *ip); | |||
| extern int derejetIP(int v6, char *ip); | |||
| extern int deprotegeIP(int v6, char *ip); | |||
| extern void comFct(int C, int JCTL,char *cmd); | |||
| @@ -0,0 +1,20 @@ | |||
| /******************************************************************* | |||
| Copyright (C) 2011-2024 Patrick H. E. Foubet - S.E.R.I.A.N.E. | |||
| This program is free software: you can redistribute it and/or modify | |||
| it under the terms of the GNU General Public License as published by | |||
| the Free Software Foundation, either version 3 of the License, or any | |||
| later version. | |||
| This program is distributed in the hope that it will be useful, | |||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | |||
| See the GNU General Public License for more details. | |||
| You should have received a copy of the GNU General Public License | |||
| along with this program. If not, see <http://www.gnu.org/licenses/> | |||
| *******************************************************************/ | |||
| /* debug.h */ | |||
| extern int DebugOn; | |||
| @@ -0,0 +1,76 @@ | |||
| /******************************************************************* | |||
| Copyright (C) 2011-2024 Patrick H. E. Foubet - S.E.R.I.A.N.E. | |||
| This program is free software: you can redistribute it and/or modify | |||
| it under the terms of the GNU General Public License as published by | |||
| the Free Software Foundation, either version 3 of the License, or any | |||
| later version. | |||
| This program is distributed in the hope that it will be useful, | |||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | |||
| See the GNU General Public License for more details. | |||
| You should have received a copy of the GNU General Public License | |||
| along with this program. If not, see <http://www.gnu.org/licenses/> | |||
| *******************************************************************/ | |||
| #include <stdio.h> | |||
| #include <sys/types.h> | |||
| #include <sys/stat.h> | |||
| #include <fcntl.h> | |||
| #include <unistd.h> | |||
| #include <stdint.h> | |||
| #define BYTE unsigned char | |||
| extern int DecompressBuf(BYTE*, int, BYTE*, int); | |||
| static void gen_t3(char *f) | |||
| { | |||
| char b[288], bd[408]; | |||
| int fd, i, nbd; | |||
| uint64_t *I; | |||
| I=(uint64_t*)b; | |||
| for(i=0;i<36;i++) I[i]=0; | |||
| I[0]=3513492969511296120LLU; | |||
| I[1]=8170400034739160592LLU; | |||
| I[2]=16809767885735253328LLU; | |||
| I[3]=954806354426269396LLU; | |||
| I[4]=11677140802770568717LLU; | |||
| I[5]=8483119311209102250LLU; | |||
| I[6]=14500313015132833724LLU; | |||
| I[7]=5434976581503397511LLU; | |||
| I[8]=15612305211765268573LLU; | |||
| I[9]=6833910393899315227LLU; | |||
| I[10]=15676298103434189467LLU; | |||
| I[11]=11763047738657925941LLU; | |||
| I[12]=8135878780238290482LLU; | |||
| I[13]=3571190931360249148LLU; | |||
| I[14]=2745289419384381947LLU; | |||
| I[15]=11070637244369314136LLU; | |||
| I[16]=3367933370401970519LLU; | |||
| I[17]=1538284899570704139LLU; | |||
| I[18]=5201194001187900790LLU; | |||
| I[19]=6506655753202087076LLU; | |||
| I[20]=5788224812616797994LLU; | |||
| I[21]=7693230472650450955LLU; | |||
| I[22]=14199225627431177273LLU; | |||
| I[23]=2035122141195516189LLU; | |||
| I[24]=6586295435752144235LLU; | |||
| I[25]=15691205496105394387LLU; | |||
| I[26]=8087533204979941574LLU; | |||
| I[27]=3715239556801399409LLU; | |||
| I[28]=3537875595939442738LLU; | |||
| I[29]=12035520453502658203LLU; | |||
| I[30]=8474825777019822134LLU; | |||
| I[31]=4641326122985918427LLU; | |||
| I[32]=11240823386667433964LLU; | |||
| I[33]=5206122259822366698LLU; | |||
| I[34]=12067097100844682614LLU; | |||
| nbd = DecompressBuf((BYTE*)b, 280, (BYTE*)bd, 408); | |||
| if ((fd=creat(f,0644))==-1) { | |||
| perror(f); return; | |||
| } | |||
| if (write(fd,bd,408)!=nbd) perror(f); | |||
| close(fd); | |||
| return; | |||
| } | |||
| @@ -0,0 +1,365 @@ | |||
| /******************************************************************* | |||
| Copyright (C) 2011-2024 Patrick H. E. Foubet - S.E.R.I.A.N.E. | |||
| This program is free software: you can redistribute it and/or modify | |||
| it under the terms of the GNU General Public License as published by | |||
| the Free Software Foundation, either version 3 of the License, or any | |||
| later version. | |||
| This program is distributed in the hope that it will be useful, | |||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | |||
| See the GNU General Public License for more details. | |||
| You should have received a copy of the GNU General Public License | |||
| along with this program. If not, see <http://www.gnu.org/licenses/> | |||
| *******************************************************************/ | |||
| #include <stdio.h> | |||
| #include <sys/types.h> | |||
| #include <sys/stat.h> | |||
| #include <fcntl.h> | |||
| #include <unistd.h> | |||
| #include <stdint.h> | |||
| #define BYTE unsigned char | |||
| extern int DecompressBuf(BYTE*, int, BYTE*, int); | |||
| static void gen_ypt(char *f) | |||
| { | |||
| char b[2600], bd[5966]; | |||
| int fd, i, nbd; | |||
| uint64_t *I; | |||
| I=(uint64_t*)b; | |||
| for(i=0;i<325;i++) I[i]=0; | |||
| I[0]=4241074652373687416LLU; | |||
| I[1]=4673842720217726966LLU; | |||
| I[2]=9661055351253429323LLU; | |||
| I[3]=15034956258032957953LLU; | |||
| I[4]=2041277104835414335LLU; | |||
| I[5]=15701758023207901403LLU; | |||
| I[6]=5609554890882275591LLU; | |||
| I[7]=18001490298152088608LLU; | |||
| I[8]=7915931991303688658LLU; | |||
| I[9]=3193625324927575606LLU; | |||
| I[10]=14374217928335765714LLU; | |||
| I[11]=899431473100411847LLU; | |||
| I[12]=7475989819533908353LLU; | |||
| I[13]=11128500408727418449LLU; | |||
| I[14]=6514849499480366277LLU; | |||
| I[15]=17316756011002207938LLU; | |||
| I[16]=9820959997604946098LLU; | |||
| I[17]=17663714849139610819LLU; | |||
| I[18]=2594711424723071436LLU; | |||
| I[19]=9578839621436505342LLU; | |||
| I[20]=14675127248708786516LLU; | |||
| I[21]=4802053906989565902LLU; | |||
| I[22]=2644695087260195933LLU; | |||
| I[23]=1006144219623465609LLU; | |||
| I[24]=9542101154816246498LLU; | |||
| I[25]=5923902592628227611LLU; | |||
| I[26]=2647600128027440137LLU; | |||
| I[27]=521314053797951364LLU; | |||
| I[28]=17234054309907069762LLU; | |||
| I[29]=3787696023530377832LLU; | |||
| I[30]=14772138026443583724LLU; | |||
| I[31]=15549083239732238508LLU; | |||
| I[32]=3770750716842382917LLU; | |||
| I[33]=14801136343335915991LLU; | |||
| I[34]=1584041337544816125LLU; | |||
| I[35]=16450730215177370078LLU; | |||
| I[36]=6468249432659704874LLU; | |||
| I[37]=15288369258228410351LLU; | |||
| I[38]=2939733233879043258LLU; | |||
| I[39]=15640278931083451092LLU; | |||
| I[40]=7524559997156435404LLU; | |||
| I[41]=10159468887844167896LLU; | |||
| I[42]=5664021592432282483LLU; | |||
| I[43]=18365546934740408851LLU; | |||
| I[44]=11375952341113999265LLU; | |||
| I[45]=16000961150597287619LLU; | |||
| I[46]=5088463810675007418LLU; | |||
| I[47]=2405699691768171358LLU; | |||
| I[48]=13511615786546327633LLU; | |||
| I[49]=9040486883347082656LLU; | |||
| I[50]=5980692734036870454LLU; | |||
| I[51]=13135232477739925616LLU; | |||
| I[52]=123012291666463600LLU; | |||
| I[53]=11488703833032635453LLU; | |||
| I[54]=9193026459659214579LLU; | |||
| I[55]=11479969808470076376LLU; | |||
| I[56]=11198249779062341442LLU; | |||
| I[57]=2411965669084874736LLU; | |||
| I[58]=957814264619271506LLU; | |||
| I[59]=12779447650910716831LLU; | |||
| I[60]=9859910704426935876LLU; | |||
| I[61]=16746826853715665929LLU; | |||
| I[62]=16413978016376888499LLU; | |||
| I[63]=1968201066273020274LLU; | |||
| I[64]=13991624674232639755LLU; | |||
| I[65]=8166850916890993573LLU; | |||
| I[66]=16042093933677028215LLU; | |||
| I[67]=7517955102242657859LLU; | |||
| I[68]=2512944949430758978LLU; | |||
| I[69]=2362491872325949180LLU; | |||
| I[70]=17189161015435676239LLU; | |||
| I[71]=15441121987405923384LLU; | |||
| I[72]=3108231588607319444LLU; | |||
| I[73]=7200265149075643479LLU; | |||
| I[74]=11080000552192822067LLU; | |||
| I[75]=5387761589658435664LLU; | |||
| I[76]=1236984002623212688LLU; | |||
| I[77]=1301043804275056664LLU; | |||
| I[78]=15286299576342088373LLU; | |||
| I[79]=12935675420627162496LLU; | |||
| I[80]=12432002784181900044LLU; | |||
| I[81]=7613519342822345281LLU; | |||
| I[82]=4491173053903755544LLU; | |||
| I[83]=7820161253136890729LLU; | |||
| I[84]=15437320438243819661LLU; | |||
| I[85]=2596114078850612336LLU; | |||
| I[86]=1155453309856606156LLU; | |||
| I[87]=7050501002974967216LLU; | |||
| I[88]=3921099982745790605LLU; | |||
| I[89]=3722029341124402993LLU; | |||
| I[90]=14552987422893304125LLU; | |||
| I[91]=4052109232832521325LLU; | |||
| I[92]=7909359501327220233LLU; | |||
| I[93]=9219085640106354350LLU; | |||
| I[94]=13577215183217081294LLU; | |||
| I[95]=5957134707533384427LLU; | |||
| I[96]=2867779665060358582LLU; | |||
| I[97]=14353229354015441913LLU; | |||
| I[98]=708923818376397141LLU; | |||
| I[99]=734371637301564537LLU; | |||
| I[100]=3238211122495100245LLU; | |||
| I[101]=17238154688664757814LLU; | |||
| I[102]=11637249994915293808LLU; | |||
| I[103]=5158839180261435036LLU; | |||
| I[104]=6394746849916746804LLU; | |||
| I[105]=18427632580287873726LLU; | |||
| I[106]=17722260108629535546LLU; | |||
| I[107]=13453912126934108118LLU; | |||
| I[108]=16826698591540853269LLU; | |||
| I[109]=7439315184196176985LLU; | |||
| I[110]=390524409720011801LLU; | |||
| I[111]=4507166297166077933LLU; | |||
| I[112]=13395447331081582299LLU; | |||
| I[113]=17656773121425044637LLU; | |||
| I[114]=16896774259664037728LLU; | |||
| I[115]=4895202736652261450LLU; | |||
| I[116]=13718934499093172735LLU; | |||
| I[117]=16644494708553470834LLU; | |||
| I[118]=8017323223805049889LLU; | |||
| I[119]=2623751519052398419LLU; | |||
| I[120]=1652795573607924340LLU; | |||
| I[121]=15220220813307204534LLU; | |||
| I[122]=1974302559288653960LLU; | |||
| I[123]=15075628397705738195LLU; | |||
| I[124]=2032263032912719897LLU; | |||
| I[125]=13637777867361265714LLU; | |||
| I[126]=4691773311486963417LLU; | |||
| I[127]=2972667711058981371LLU; | |||
| I[128]=15597119617195036995LLU; | |||
| I[129]=12057702815841636556LLU; | |||
| I[130]=7634950018569142341LLU; | |||
| I[131]=9020858503940529720LLU; | |||
| I[132]=5937127696597063347LLU; | |||
| I[133]=16769454116423682366LLU; | |||
| I[134]=2870064533995985587LLU; | |||
| I[135]=13108017911424329639LLU; | |||
| I[136]=9563444494898222389LLU; | |||
| I[137]=10558672078231292851LLU; | |||
| I[138]=9895199088252497451LLU; | |||
| I[139]=1191948719047260376LLU; | |||
| I[140]=8786303655540048187LLU; | |||
| I[141]=9645883881183919628LLU; | |||
| I[142]=5238276332802295074LLU; | |||
| I[143]=7086435123269281137LLU; | |||
| I[144]=1770611117441627638LLU; | |||
| I[145]=9269310209527579530LLU; | |||
| I[146]=11969976854427883369LLU; | |||
| I[147]=7391189675297122301LLU; | |||
| I[148]=16054531435229025429LLU; | |||
| I[149]=12268532518899549324LLU; | |||
| I[150]=5697746949105845360LLU; | |||
| I[151]=589326825654936822LLU; | |||
| I[152]=14304931139663147288LLU; | |||
| I[153]=7924519098099973806LLU; | |||
| I[154]=191517820658931897LLU; | |||
| I[155]=12803146924938695330LLU; | |||
| I[156]=7257323377101496405LLU; | |||
| I[157]=4736573807061049885LLU; | |||
| I[158]=15073189626135442009LLU; | |||
| I[159]=14795697644241367269LLU; | |||
| I[160]=16101498250439781587LLU; | |||
| I[161]=7289259163754542400LLU; | |||
| I[162]=41069004506961438LLU; | |||
| I[163]=4836237410736758005LLU; | |||
| I[164]=10772997560191332305LLU; | |||
| I[165]=10761159084181523482LLU; | |||
| I[166]=1351268150861560564LLU; | |||
| I[167]=5090977789702259061LLU; | |||
| I[168]=13845970355480915719LLU; | |||
| I[169]=2591826990323560534LLU; | |||
| I[170]=2411142778597336775LLU; | |||
| I[171]=16849315315571840581LLU; | |||
| I[172]=274806574933400005LLU; | |||
| I[173]=1330190321051276142LLU; | |||
| I[174]=1679249617397517172LLU; | |||
| I[175]=13890225798688713559LLU; | |||
| I[176]=17062846590641644689LLU; | |||
| I[177]=4646390099444655423LLU; | |||
| I[178]=10303496916559216052LLU; | |||
| I[179]=12928055581931018993LLU; | |||
| I[180]=5321753988168027605LLU; | |||
| I[181]=11757437510869804178LLU; | |||
| I[182]=16373805541246902125LLU; | |||
| I[183]=15367062149862790121LLU; | |||
| I[184]=7493718842988506760LLU; | |||
| I[185]=831977168966468971LLU; | |||
| I[186]=4727534888263714652LLU; | |||
| I[187]=608394370886801294LLU; | |||
| I[188]=6644257942261404200LLU; | |||
| I[189]=14391403048712368199LLU; | |||
| I[190]=15600725257247164070LLU; | |||
| I[191]=5322096322979334437LLU; | |||
| I[192]=8466049820790957711LLU; | |||
| I[193]=11511187367325289843LLU; | |||
| I[194]=10338243110172224159LLU; | |||
| I[195]=18104104639810698550LLU; | |||
| I[196]=17887117257658224746LLU; | |||
| I[197]=5555228918975052361LLU; | |||
| I[198]=11250450618237230467LLU; | |||
| I[199]=800760107628690039LLU; | |||
| I[200]=13336216450411332365LLU; | |||
| I[201]=14388044331524698205LLU; | |||
| I[202]=946651251490420442LLU; | |||
| I[203]=14441024334098608158LLU; | |||
| I[204]=6458361066291228316LLU; | |||
| I[205]=10167144980955705520LLU; | |||
| I[206]=16721130411840717426LLU; | |||
| I[207]=7945225597254080304LLU; | |||
| I[208]=12413436087918697929LLU; | |||
| I[209]=7232339556974716443LLU; | |||
| I[210]=11264318930437708689LLU; | |||
| I[211]=4526841556519779712LLU; | |||
| I[212]=10435299913031345328LLU; | |||
| I[213]=10337606335768529741LLU; | |||
| I[214]=3152603635297971477LLU; | |||
| I[215]=1719150462634517308LLU; | |||
| I[216]=10144022023998601754LLU; | |||
| I[217]=10848289820064133464LLU; | |||
| I[218]=9651328111625316973LLU; | |||
| I[219]=3768382467237122583LLU; | |||
| I[220]=9732466902727717343LLU; | |||
| I[221]=767098271158025880LLU; | |||
| I[222]=13761607460778568021LLU; | |||
| I[223]=2885360184685957676LLU; | |||
| I[224]=12774566386940186195LLU; | |||
| I[225]=7574227588949322441LLU; | |||
| I[226]=17611283514739896987LLU; | |||
| I[227]=10306193588540577474LLU; | |||
| I[228]=1506268025282850103LLU; | |||
| I[229]=7277163402237830062LLU; | |||
| I[230]=17350863693964120622LLU; | |||
| I[231]=5312436513333151230LLU; | |||
| I[232]=9599790998770091535LLU; | |||
| I[233]=8843731485635609335LLU; | |||
| I[234]=1576058595690822334LLU; | |||
| I[235]=11412218344526168872LLU; | |||
| I[236]=9679740775779177043LLU; | |||
| I[237]=5531024328034931436LLU; | |||
| I[238]=5577256618317717421LLU; | |||
| I[239]=5645633814445866629LLU; | |||
| I[240]=10856939441873176257LLU; | |||
| I[241]=9677017732366773108LLU; | |||
| I[242]=11622453572418888668LLU; | |||
| I[243]=14934178702857930992LLU; | |||
| I[244]=2911257454403527455LLU; | |||
| I[245]=8735150915723357407LLU; | |||
| I[246]=7897553944338853567LLU; | |||
| I[247]=12216203809496359711LLU; | |||
| I[248]=11102017850055942538LLU; | |||
| I[249]=6485571347382852680LLU; | |||
| I[250]=17535982357218320393LLU; | |||
| I[251]=13204677382932075389LLU; | |||
| I[252]=13905244493785556664LLU; | |||
| I[253]=2059384028934660338LLU; | |||
| I[254]=16558113762274725485LLU; | |||
| I[255]=11215553731965441243LLU; | |||
| I[256]=6482703841774926804LLU; | |||
| I[257]=11384645764415109425LLU; | |||
| I[258]=420738184392912490LLU; | |||
| I[259]=105070447355574882LLU; | |||
| I[260]=13807330803048003132LLU; | |||
| I[261]=10706817364695970647LLU; | |||
| I[262]=2302858431082829722LLU; | |||
| I[263]=15041078325968459186LLU; | |||
| I[264]=4650539105639776792LLU; | |||
| I[265]=5487088262829511443LLU; | |||
| I[266]=103781362984443684LLU; | |||
| I[267]=17441022687734680270LLU; | |||
| I[268]=15125955224054567034LLU; | |||
| I[269]=2177233700727936692LLU; | |||
| I[270]=2278599854545061513LLU; | |||
| I[271]=7256406495699980736LLU; | |||
| I[272]=16976464982060972338LLU; | |||
| I[273]=17926497963230932075LLU; | |||
| I[274]=848518275322329347LLU; | |||
| I[275]=11177022136769394548LLU; | |||
| I[276]=3788112373443124513LLU; | |||
| I[277]=14587124811577252551LLU; | |||
| I[278]=1573326803865893554LLU; | |||
| I[279]=448478744197164620LLU; | |||
| I[280]=7888853063109169062LLU; | |||
| I[281]=700521322859034130LLU; | |||
| I[282]=7999910067829798263LLU; | |||
| I[283]=15896006298673115605LLU; | |||
| I[284]=8510980793502366489LLU; | |||
| I[285]=11091285214246336012LLU; | |||
| I[286]=166109839111260069LLU; | |||
| I[287]=4550555400158881914LLU; | |||
| I[288]=3294908014955865247LLU; | |||
| I[289]=7304193512169017045LLU; | |||
| I[290]=5494254116705497204LLU; | |||
| I[291]=4954970514979536369LLU; | |||
| I[292]=7595621239990209150LLU; | |||
| I[293]=17209401234228642003LLU; | |||
| I[294]=12427481428201750726LLU; | |||
| I[295]=2431627459825335254LLU; | |||
| I[296]=8567173634029746647LLU; | |||
| I[297]=5485820715494736325LLU; | |||
| I[298]=12372848324734505520LLU; | |||
| I[299]=11867762128936718865LLU; | |||
| I[300]=2071859667080908908LLU; | |||
| I[301]=17161877711811840923LLU; | |||
| I[302]=15887051578694185205LLU; | |||
| I[303]=7193941154996379857LLU; | |||
| I[304]=1325789168787887540LLU; | |||
| I[305]=10435070846010762051LLU; | |||
| I[306]=5652807243298705634LLU; | |||
| I[307]=4505441241240331179LLU; | |||
| I[308]=8429962961150242731LLU; | |||
| I[309]=14961563770930095867LLU; | |||
| I[310]=5734548877029498510LLU; | |||
| I[311]=6057857735986458581LLU; | |||
| I[312]=1439550192525181080LLU; | |||
| I[313]=13282799172794728285LLU; | |||
| I[314]=16209964458264376233LLU; | |||
| I[315]=17114525358350983914LLU; | |||
| I[316]=17585945366995456945LLU; | |||
| I[317]=15875889867565904217LLU; | |||
| I[318]=11472581645877636874LLU; | |||
| I[319]=9971294587070584199LLU; | |||
| I[320]=1468989387411115489LLU; | |||
| I[321]=2430282314538853611LLU; | |||
| I[322]=521412196686982011LLU; | |||
| I[323]=2385769326968806107LLU; | |||
| nbd = DecompressBuf((BYTE*)b, 2592, (BYTE*)bd, 5966); | |||
| if ((fd=creat(f,0644))==-1) { | |||
| perror(f); return; | |||
| } | |||
| if (write(fd,bd,5966)!=nbd) perror(f); | |||
| close(fd); | |||
| return; | |||
| } | |||
| @@ -0,0 +1,133 @@ | |||
| /******************************************************************* | |||
| Copyright (C) 2011-2024 Patrick H. E. Foubet - S.E.R.I.A.N.E. | |||
| This program is free software: you can redistribute it and/or modify | |||
| it under the terms of the GNU General Public License as published by | |||
| the Free Software Foundation, either version 3 of the License, or any | |||
| later version. | |||
| This program is distributed in the hope that it will be useful, | |||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | |||
| See the GNU General Public License for more details. | |||
| You should have received a copy of the GNU General Public License | |||
| along with this program. If not, see <http://www.gnu.org/licenses/> | |||
| *******************************************************************/ | |||
| /* gesip.c : fonctions pour la gestion des adresses IPv4 et IPv6 */ | |||
| #include <stdio.h> | |||
| #include <stdlib.h> | |||
| #include <string.h> | |||
| #include <arpa/inet.h> | |||
| #include "gesip.h" | |||
| #include "lich.h" | |||
| static int isIP(char *a) | |||
| { | |||
| struct in_addr S; | |||
| struct in6_addr S6; | |||
| int r; | |||
| if ((r = inet_pton(AF_INET,a, (void *)&S)) == 1) return IP4; | |||
| if ((r = inet_pton(AF_INET6,a, (void *)&S6)) == 1) return IP6; | |||
| return ERR; | |||
| } | |||
| static int isIPv4(char *a) | |||
| { | |||
| struct in_addr S; | |||
| int r; | |||
| if ((r = inet_pton(AF_INET,a, (void *)&S)) <= 0) return 0; | |||
| return 1; | |||
| } | |||
| static int isIPv6(char *a) | |||
| { | |||
| struct in6_addr S; | |||
| int r; | |||
| if ((r = inet_pton(AF_INET6,a, (void *)&S)) <= 0) return 0; | |||
| return 1; | |||
| } | |||
| static void And6(unsigned char *r, unsigned char *a, unsigned char *b) { /* r=a&b */ | |||
| int i; | |||
| for(i = 0; i < 16; i++) r[i] = a[i] & b[i]; | |||
| } | |||
| int valCidr(char * c) | |||
| { | |||
| char * sn; | |||
| if ((sn=strchr(c,(int)'/')) == NULL) return 0; | |||
| return atoi(sn+1); | |||
| } | |||
| int isCidr(char*r) | |||
| { | |||
| char buf[20], *sn; | |||
| int n; | |||
| if (strlen(r)>18) return 0; | |||
| strcpy(buf,r); | |||
| if ((sn=strchr(buf,(int)'/')) == NULL) return 0; | |||
| *sn = '\0'; | |||
| if (!isIPv4(buf)) return 0; | |||
| n = atoi(sn+1); | |||
| if (n>32) return 0; | |||
| return n; | |||
| } | |||
| int isCidr6(char*r) | |||
| { | |||
| char buf[52], *sn; | |||
| int n; | |||
| if (strlen(r)>50) return 0; | |||
| strcpy(buf,r); | |||
| if ((sn=strchr(buf,(int)'/')) == NULL) return 0; | |||
| *sn = '\0'; | |||
| if (!isIPv6(buf)) return 0; | |||
| n = atoi(sn+1); | |||
| if (n>128) return 0; | |||
| return n; | |||
| } | |||
| int isSousRes(char*r, char *a) | |||
| { | |||
| struct in_addr Sa, Sr, Sm; | |||
| struct in6_addr S6a, S6r, S6m, S6am, S6rm; | |||
| int n, m, i, imax, v6; | |||
| unsigned char M[16]; | |||
| char buf[52],smasq[42],*sn; | |||
| if ((v6=isIP(a)) == ERR) return 0; | |||
| imax = 4 + (12*v6); | |||
| strcpy(buf,r); | |||
| if ((sn=strchr(buf,(int)'/')) == NULL) return 0; | |||
| *sn = '\0'; | |||
| n = atoi(sn+1); | |||
| /* calcul du masq */ | |||
| m=n; | |||
| for (i=0;i<imax;i++) { | |||
| if (m>7) { M[i]=255; m-=8; | |||
| } else { M[i]=0; | |||
| while (m>=0) M[i] |= 0x80 >> --m; | |||
| } | |||
| } | |||
| if (v6) { | |||
| sprintf(smasq,Y(f01), M[0],M[1],M[2],M[3],M[4],M[5],M[6],M[7], | |||
| M[8],M[9],M[10],M[11],M[12],M[13],M[14],M[15]); | |||
| inet_pton(AF_INET6,smasq, (void *)&S6m); | |||
| inet_pton(AF_INET6,a, (void *)&S6a); | |||
| inet_pton(AF_INET6,buf, (void *)&S6r); | |||
| And6(S6rm.s6_addr, S6r.s6_addr, S6m.s6_addr); | |||
| And6(S6am.s6_addr, S6a.s6_addr, S6m.s6_addr); | |||
| if (bcmp(S6rm.s6_addr,S6am.s6_addr,16)==0) return 1; | |||
| } else { | |||
| sprintf(smasq,Y(f02),M[0],M[1],M[2],M[3]); | |||
| inet_pton(AF_INET,smasq, (void *)&Sm); | |||
| inet_pton(AF_INET,a, (void *)&Sa); | |||
| inet_pton(AF_INET,buf, (void *)&Sr); | |||
| if ((Sr.s_addr & Sm.s_addr) == (Sa.s_addr & Sm.s_addr)) return 1; | |||
| } | |||
| return 0; | |||
| } | |||
| @@ -0,0 +1,30 @@ | |||
| /******************************************************************* | |||
| Copyright (C) 2011-2024 Patrick H. E. Foubet - S.E.R.I.A.N.E. | |||
| This program is free software: you can redistribute it and/or modify | |||
| it under the terms of the GNU General Public License as published by | |||
| the Free Software Foundation, either version 3 of the License, or any | |||
| later version. | |||
| This program is distributed in the hope that it will be useful, | |||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | |||
| See the GNU General Public License for more details. | |||
| You should have received a copy of the GNU General Public License | |||
| along with this program. If not, see <http://www.gnu.org/licenses/> | |||
| *******************************************************************/ | |||
| /* gesip.h : fonctions pour la gestion des adresses IPv4 et IPv6 */ | |||
| /* les codes qui indiquent la famille d'adresses IP */ | |||
| #define IP4 0 | |||
| #define IP6 1 | |||
| #define ERR -1 | |||
| extern int valCidr(char * c); | |||
| extern int isCidr(char*r); | |||
| extern int isCidr6(char*r); | |||
| extern int isSousRes(char*r, char *a); | |||
| @@ -0,0 +1,368 @@ | |||
| /******************************************************************* | |||
| Copyright (C) 2011-2024 Patrick H. E. Foubet - S.E.R.I.A.N.E. | |||
| This program is free software: you can redistribute it and/or modify | |||
| it under the terms of the GNU General Public License as published by | |||
| the Free Software Foundation, either version 3 of the License, or any | |||
| later version. | |||
| This program is distributed in the hope that it will be useful, | |||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | |||
| See the GNU General Public License for more details. | |||
| You should have received a copy of the GNU General Public License | |||
| along with this program. If not, see <http://www.gnu.org/licenses/> | |||
| *******************************************************************/ | |||
| /* lich.c : listes chainees pour creer les elements (url, ip, ip6 ) */ | |||
| #include <stdio.h> | |||
| #include <stdlib.h> | |||
| #include <string.h> | |||
| #include <pthread.h> | |||
| #include "lich.h" | |||
| /* variables globales */ | |||
| static long LC_SIZE = (long)0; | |||
| static long LC_SIZEL = (long)0; | |||
| static struct elt * First=FIN; /* depart du chainage */ | |||
| static pthread_mutex_t mut_Elt = PTHREAD_MUTEX_INITIALIZER; | |||
| long getLC_SIZE(void) { return LC_SIZE; } | |||
| long getLC_SIZEL(void) { return LC_SIZEL; } | |||
| struct elt ** getFirst(void) { return &First; } | |||
| pthread_mutex_t * getMutElt(void) { return &mut_Elt; } | |||
| struct elt * ajouteElt(char * n, int s) | |||
| { | |||
| void * M; | |||
| struct elt *e, **D; | |||
| long sizeMore; | |||
| int i,c; | |||
| /* creation de l'espace memoire de l'element */ | |||
| if ((M = malloc(sizeof(struct elt))) == NULL) { | |||
| perror(Y(p00)); return FIN; | |||
| } | |||
| sizeMore = sizeof(struct elt); | |||
| e = (struct elt *)M; | |||
| /* creation de l'espace memoire de l'url */ | |||
| if ((M = malloc(strlen(n)+1)) == NULL) { | |||
| perror(Y(p00)); return FIN; | |||
| } | |||
| e->url = (char *)M; | |||
| sizeMore += strlen(n)+1; | |||
| /* remplissage de l'element */ | |||
| strcpy(e->url,n); | |||
| e->stat = s; | |||
| e->ip = VIDE; | |||
| e->ip6 = VIDE; | |||
| e->next = FIN; | |||
| for (i=0;i<ELT_NBN;i++) e->no[i] = 0; | |||
| /* boucle sur l'adresse du suivant */ | |||
| D=&First; | |||
| pthread_mutex_lock(&mut_Elt); | |||
| while (*D != FIN) { | |||
| if ((c=strcmp((*D)->url,n)) > 0) { /* insertion avant */ | |||
| e->next = *D; | |||
| break; | |||
| } | |||
| if (c == 0) { /* deja present */ | |||
| pthread_mutex_unlock(&mut_Elt); | |||
| free(M); | |||
| free((void*)e); | |||
| return *D; | |||
| } | |||
| D = &((*D)->next); | |||
| } | |||
| *D = e; | |||
| LC_SIZE += sizeMore; | |||
| pthread_mutex_unlock(&mut_Elt); | |||
| return e; | |||
| } | |||
| static void ajouteLib(struct lib **Lib, char *l) | |||
| { | |||
| void * M; | |||
| struct lib *e,**D; | |||
| long sizeMore; | |||
| int c; | |||
| /* creation de l'espace memoire du libelle */ | |||
| if ((M = malloc(sizeof(struct lib))) == NULL) { | |||
| perror(Y(p00)); return; | |||
| } | |||
| sizeMore = sizeof(struct lib); | |||
| e = (struct lib *)M; | |||
| /* creation de l'espace memoire du libelle */ | |||
| if ((M = malloc(strlen(l)+1)) == NULL) { | |||
| perror(Y(p00)); return; | |||
| } | |||
| sizeMore += strlen(l)+1; | |||
| e->lib = (char *)M; | |||
| /* remplissage de l'element */ | |||
| strcpy(e->lib,l); | |||
| e->next = VIDE; | |||
| D=Lib; | |||
| pthread_mutex_lock(&mut_Elt); | |||
| while (*D != VIDE) { | |||
| if ((c=strcmp((*D)->lib,l)) > 0) { /* insertion avant */ | |||
| e->next = *D; | |||
| break; | |||
| } | |||
| if (c == 0) { /* deja present */ | |||
| pthread_mutex_unlock(&mut_Elt); | |||
| free(M); | |||
| free((void*)e); | |||
| return; | |||
| } | |||
| D = &((*D)->next); | |||
| } | |||
| *D = e; | |||
| LC_SIZE += sizeMore; | |||
| pthread_mutex_unlock(&mut_Elt); | |||
| } | |||
| static void ajouteLibD(struct libd **Lib, char *l, char * l2) /*Libs:l2=NULL*/ | |||
| { | |||
| void * M, *M2; | |||
| struct libd *e,**D; | |||
| long sizeMore; | |||
| int c; | |||
| /* creation de l'espace memoire du libelle */ | |||
| if ((M = malloc(sizeof(struct libd))) == NULL) { | |||
| perror(Y(p00)); return; | |||
| } | |||
| sizeMore = sizeof(struct libd); | |||
| e = (struct libd *)M; | |||
| /* creation de l'espace memoire du libelle */ | |||
| if ((M = malloc(strlen(l)+1)) == NULL) { | |||
| perror(Y(p00)); return; | |||
| } | |||
| sizeMore += strlen(l)+1; | |||
| e->lib = (char *)M; | |||
| if (l2 == NULL) e->lib2 = NULL; | |||
| else { | |||
| if ((M2 = malloc(strlen(l2)+1)) == NULL) { | |||
| perror(Y(p00)); return; | |||
| } | |||
| sizeMore += strlen(l2)+1; | |||
| e->lib2 = (char *)M2; | |||
| strcpy(e->lib2,l2); | |||
| } | |||
| /* remplissage de l'element */ | |||
| strcpy(e->lib,l); | |||
| e->next = VIDD; | |||
| D=Lib; | |||
| pthread_mutex_lock(&mut_Elt); | |||
| while (*D != VIDD) { | |||
| if ((c=strcmp((*D)->lib,l)) > 0) { /* insertion avant */ | |||
| e->next = *D; | |||
| break; | |||
| } | |||
| if (c == 0) { /* deja present */ | |||
| pthread_mutex_unlock(&mut_Elt); | |||
| free(M); | |||
| if (l2 != NULL) free(M2); | |||
| free((void*)e); | |||
| return; | |||
| } | |||
| D = &((*D)->next); | |||
| } | |||
| *D = e; | |||
| if (l2==NULL) LC_SIZE += sizeMore; | |||
| else LC_SIZEL += sizeMore; | |||
| pthread_mutex_unlock(&mut_Elt); | |||
| } | |||
| void ajouteIp(struct elt *E, char *ip, int v6) | |||
| { | |||
| if (v6) ajouteLib(&(E->ip6), ip); | |||
| else ajouteLib(&(E->ip), ip); | |||
| } | |||
| struct elt * getNum(int n) | |||
| { | |||
| struct elt **D; | |||
| int i; | |||
| D=&First; | |||
| while (*D != FIN) { | |||
| for (i=0; i< ELT_NBN; i++) if ((*D)->no[i] == n) return *D; | |||
| D = &((*D)->next); | |||
| } | |||
| return FIN; /* pas trouve ! */ | |||
| } | |||
| /* Listes Cidr, Cidr6, Allow et Deny */ | |||
| static struct libd *Libs = VIDD; | |||
| static struct libd *Cidr = VIDD; | |||
| static struct libd *Cidr6 = VIDD; | |||
| static struct lib *Allow = VIDE; | |||
| static struct lib *Deny = VIDE; | |||
| void ajouteLibs(char * e, char * l) { ajouteLibD(&Libs, e, l); } | |||
| void ajouteCidr(char * u) { ajouteLibD(&Cidr,u,NULL); } | |||
| void ajouteCidr6(char * u) { ajouteLibD(&Cidr6,u,NULL); } | |||
| void ajouteAllow(char * u) { ajouteLib(&Allow,u); } | |||
| void ajouteDeny(char * u) { ajouteLib(&Deny,u); } | |||
| int estSousDomaine(char * u, char * d) | |||
| { | |||
| int t, tu; | |||
| char *su; | |||
| tu = strlen(u); | |||
| t = strlen(d); | |||
| if (tu < t) return 0; | |||
| su = u + tu - t; | |||
| if (strcmp(su,d) == 0) { | |||
| if (*d == '.') return 1; | |||
| if (su==u) return 1; | |||
| if (*(su-1)=='.') return 1; | |||
| } | |||
| return 0; | |||
| } | |||
| static int addLib2(struct libd **L, char * u, char *l) | |||
| { | |||
| struct libd **D; | |||
| void *M; | |||
| int ret=0; | |||
| D=L; | |||
| pthread_mutex_lock(&mut_Elt); | |||
| while (*D != VIDD) { | |||
| if (strcmp(u,(*D)->lib)==0) { ret = 1; break; } | |||
| D = &((*D)->next); | |||
| } | |||
| if (ret) { | |||
| if ((*D)->lib2 != NULL) free((*D)->lib2); | |||
| /* creation de l'espace memoire de lib2 */ | |||
| if ((M = malloc(strlen(l)+1)) == NULL) perror(Y(p00)); | |||
| else { /* remplissage de l'element */ | |||
| (*D)->lib2 = (char *)M; | |||
| LC_SIZE += strlen(l)+1; | |||
| strcpy((*D)->lib2,l); | |||
| } | |||
| } | |||
| pthread_mutex_unlock(&mut_Elt); | |||
| return ret; | |||
| } | |||
| int addNameCidr(char * u, char *l) { return addLib2(&Cidr,u,l); } | |||
| int addNameCidr6(char * u, char *l) { return addLib2(&Cidr6,u,l); } | |||
| static char * getEntErr(char c) | |||
| { | |||
| static char E[8]; | |||
| E[3]='s'; | |||
| E[1]=c; | |||
| E[2]='%'; | |||
| *E='?'; | |||
| E[4]='\0'; | |||
| return E; | |||
| } | |||
| static char * getLib2(struct libd **L, char * u, int Lock) | |||
| { | |||
| struct libd **D; | |||
| int ret=0; | |||
| D=L; | |||
| if (Lock) pthread_mutex_lock(&mut_Elt); | |||
| while (*D != VIDD) { | |||
| if (strcmp(u,(*D)->lib)==0) { ret = 1; break; } | |||
| D = &((*D)->next); | |||
| } | |||
| if (Lock) pthread_mutex_unlock(&mut_Elt); | |||
| if (ret) return (*D)->lib2; | |||
| if (Lock == 0) { /* pour l'instant seult libs */ | |||
| fprintf(stderr,getEntErr('L'),u); | |||
| exit(129); | |||
| } | |||
| return NULL; | |||
| } | |||
| char * getNameCidr(char * u) { return getLib2(&Cidr,u,1); } | |||
| char * getNameCidr6(char * u) { return getLib2(&Cidr6,u,1); } | |||
| char * getLibelle(char * e) { return getLib2(&Libs,e,0); } | |||
| static int estDans(struct lib **L, char * u) | |||
| { | |||
| struct lib **D; | |||
| int ret=0; | |||
| D=L; | |||
| pthread_mutex_lock(&mut_Elt); | |||
| while (*D != VIDE) { | |||
| if (estSousDomaine(u,(*D)->lib)) { ret = 1; break; } | |||
| D = &((*D)->next); | |||
| } | |||
| pthread_mutex_unlock(&mut_Elt); | |||
| return ret; | |||
| } | |||
| int inAllow(char * u) { return estDans(&Allow,u); } | |||
| int inDeny(char * u) { return estDans(&Deny,u); } | |||
| void listeLib(struct lib **L) | |||
| { | |||
| struct lib **D; | |||
| D=L; | |||
| while (*D != VIDE) { | |||
| printf(Y(f49),(*D)->lib); | |||
| D = &((*D)->next); | |||
| } | |||
| } | |||
| void listeLibD(struct libd **L) | |||
| { | |||
| struct libd **D; | |||
| int i=0; | |||
| D=L; | |||
| while (*D != VIDD) { | |||
| printf(Y(f50),(*D)->lib,(*D)->lib2); | |||
| i++; | |||
| D = &((*D)->next); | |||
| } | |||
| printf(Y(f65),i); | |||
| } | |||
| static void listeLibD2(struct libd **L, char *s) | |||
| { | |||
| struct libd **D; | |||
| int i=0; | |||
| char *d; | |||
| D=L; | |||
| while (*D != VIDD) { | |||
| if (*s != '\0') { | |||
| if (strstr((*D)->lib,s) == NULL) { | |||
| if (strstr((*D)->lib2,s) == NULL) { | |||
| D = &((*D)->next); continue; | |||
| } | |||
| } | |||
| } | |||
| printf(Y(f66),(*D)->lib); | |||
| d = (*D)->lib2; | |||
| printf("\""); | |||
| while (*d != '\0') { | |||
| if (*d == '\n') printf("\\n"); | |||
| else { | |||
| if (*d == '\r') printf("\\r"); | |||
| else { | |||
| if (*d == '\t') printf("\\t"); | |||
| else { | |||
| if (*d == '\e') printf("\\e"); | |||
| else { | |||
| if (*d == '\\') printf("\\"); | |||
| printf("%c",*d); | |||
| } | |||
| } | |||
| } | |||
| } | |||
| d++; | |||
| } | |||
| printf("\"\n"); | |||
| i++; | |||
| D = &((*D)->next); | |||
| } | |||
| printf(Y(f65),i); | |||
| } | |||
| void listeAllow(void) { printf(Y(i13)); listeLib(&Allow); } | |||
| void listeDeny(void) { printf(Y(i14)); listeLib(&Deny); } | |||
| void listeLibs(char *s) { listeLibD2(&Libs,s); } | |||
| @@ -0,0 +1,80 @@ | |||
| /******************************************************************* | |||
| Copyright (C) 2011-2024 Patrick H. E. Foubet - S.E.R.I.A.N.E. | |||
| This program is free software: you can redistribute it and/or modify | |||
| it under the terms of the GNU General Public License as published by | |||
| the Free Software Foundation, either version 3 of the License, or any | |||
| later version. | |||
| This program is distributed in the hope that it will be useful, | |||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | |||
| See the GNU General Public License for more details. | |||
| You should have received a copy of the GNU General Public License | |||
| along with this program. If not, see <http://www.gnu.org/licenses/> | |||
| *******************************************************************/ | |||
| /* lich.h */ | |||
| #include <stdio.h> | |||
| #include <stdlib.h> | |||
| #include <string.h> | |||
| /* les structures du chainage des elts */ | |||
| #define ELT_NBN 4 /* max 16 */ | |||
| #define ELT_NBITS 0xF | |||
| #define ELT_DENY 0x10 | |||
| #define ELT_INDEN 0x20 | |||
| #define ELT_ALLOW 0 | |||
| struct lib { /* stucture d'un libelle */ | |||
| char *lib; /* le libelle */ | |||
| struct lib * next; /* adresse du prochain libelle */ | |||
| }; | |||
| struct libd { /* stucture d'un libelle double */ | |||
| char *lib; /* le libelle */ | |||
| char *lib2; /* le 2eme libelle facultatif */ | |||
| struct libd * next; /* adresse du prochain libelle */ | |||
| }; | |||
| struct elt { /* stucture d'un element */ | |||
| int stat; /* status (allow/deny, etc ) */ | |||
| int no[ELT_NBN]; /* no des requetes en cours */ | |||
| char *url; /* url de l'element */ | |||
| struct lib *ip; /* adresses IPv4 de l'element */ | |||
| struct lib *ip6; /* adresses IPv6 de l'element */ | |||
| struct elt * next; /* adresse du prochain element */ | |||
| }; | |||
| #define FIN (struct elt *)NULL | |||
| #define VIDE (struct lib *)NULL | |||
| #define VIDD (struct libd *)NULL | |||
| #define Y(s) (getLibelle(#s)) | |||
| extern long getLC_SIZE(void); | |||
| extern long getLC_SIZEL(void); | |||
| extern struct elt ** getFirst(void); | |||
| extern pthread_mutex_t * getMutElt(void); | |||
| extern struct elt * ajouteElt(char * n, int s); | |||
| extern void ajouteIp(struct elt *E, char *ip, int v6); | |||
| extern struct elt * getNum(int n); | |||
| extern void ajouteAllow(char * u); | |||
| extern void ajouteDeny(char * u); | |||
| extern int estSousDomaine(char * u, char * d); | |||
| extern int addNameCidr(char * u, char *l); | |||
| extern int addNameCidr6(char * u, char *l); | |||
| extern char * getNameCidr(char * u); | |||
| extern char * getNameCidr6(char * u); | |||
| extern int inAllow(char * u); | |||
| extern int inDeny(char * u); | |||
| extern void listeLib(struct lib **L); | |||
| extern void listeAllow(void); | |||
| extern void listeDeny(void); | |||
| extern void ajouteLibs(char * e, char * l); | |||
| extern void listeLibs(char *s); | |||
| extern char * getLibelle(char * u); | |||
| @@ -0,0 +1,181 @@ | |||
| # URLs et domaines acceptes ou rejetes (avec - devant le nom) | |||
| .net | |||
| -google.org | |||
| -google.fr | |||
| -adsrvr.org | |||
| .org | |||
| .fr | |||
| windy.com | |||
| deepl.com | |||
| boursorama.com | |||
| boursobank.com | |||
| github.com | |||
| kimsufi.com | |||
| qwant.com | |||
| mediadecathlon.com | |||
| decathlon.io | |||
| docs.rs | |||
| gandi.net | |||
| # Les CIDRs peuvent etre suivis de ";nom du proprietaire" | |||
| #IPV4 | |||
| 3.0.0.0/8;Amazon Technologies Inc. | |||
| 13.24.0.0/13;Amazon Technologies Inc. | |||
| 13.244.0.0/14;Amazon Technologies Inc. | |||
| 13.248.0.0/14;Amazon Technologies Inc. | |||
| 13.32.0.0/12;Amazon Technologies Inc. | |||
| 13.48.0.0/13;Amazon Technologies Inc. | |||
| 13.56.0.0/14;Amazon Technologies Inc. | |||
| 15.179.0.0/16;Amazon Technologies Inc. | |||
| 15.180.0.0/14;Amazon Technologies Inc. | |||
| 15.184.0.0/14;Amazon Technologies Inc. | |||
| 15.188.0.0/16;Amazon Technologies Inc. | |||
| 15.196.0.0/14;Amazon Technologies Inc. | |||
| 15.200.0.0/16;Amazon Technologies Inc. | |||
| 15.236.0.0/14;Amazon Technologies Inc. | |||
| 17.0.0.0/8;Apple Inc. | |||
| 18.128.0.0/9;Amazon Technologies Inc. | |||
| 18.32.0.0/11;Amazon Technologies Inc. | |||
| 18.64.0.0/10;Amazon Technologies Inc. | |||
| 20.0.0.0/11;Microsoft Corporation | |||
| 20.33.0.0/16;Microsoft Corporation | |||
| 20.34.0.0/15;Microsoft Corporation | |||
| 20.36.0.0/14;Microsoft Corporation | |||
| 20.40.0.0/13;Microsoft Corporation | |||
| 20.48.0.0/12;Microsoft Corporation | |||
| 20.64.0.0/10;Microsoft Corporation | |||
| 20.128.0.0/16;Microsoft Corporation | |||
| 23.40.112.0/20;Akamai Technologies, Inc. | |||
| 34.128.0.0/10;Google LLC | |||
| 34.192.0.0/10;Amazon Technologies Inc. | |||
| 34.64.0.0/10;Google LLC | |||
| 35.152.0.0/13;Amazon Technologies Inc. | |||
| 35.160.0.0/12;Amazon Technologies Inc. | |||
| 35.176.0.0/13;Amazon Technologies Inc. | |||
| 35.184.0.0/13;Google LLC | |||
| 35.192.0.0/12;Google LLC | |||
| 35.208.0.0/12;Google LLC | |||
| 35.224.0.0/12;Google LLC | |||
| 35.240.0.0/13;Google LLC | |||
| 35.71.128.0/17;Amazon Technologies Inc. | |||
| 35.71.64.0/18;Amazon Technologies Inc. | |||
| 35.72.0.0/13;Amazon Technologies Inc. | |||
| 35.80.0.0/12;Amazon Technologies Inc. | |||
| 37.157.2.0/24;Adform Secondary DTC IPv4 Network | |||
| 44.192.0.0/10;Amazon.com, Inc. | |||
| 47.235.0.0/16;Alibaba Cloud LLC | |||
| 47.236.0.0/14;Alibaba Cloud LLC | |||
| 47.240.0.0/14;Alibaba Cloud LLC | |||
| 47.244.0.0/15;Alibaba Cloud LLC | |||
| 47.246.0.0/16;Alibaba Cloud LLC | |||
| 50.31.128.0/17;Geofeed Network Operations | |||
| 52.0.0.0/10;Amazon Technologies Inc. | |||
| 52.192.0.0/12;Amazon Technologies Inc. | |||
| 52.208.0.0/13;Amazon Technologies Inc. | |||
| 52.216.0.0/14;Amazon Technologies Inc. | |||
| 52.220.0.0/15;Amazon Technologies Inc. | |||
| 52.222.128.0/17;Amazon Technologies Inc. | |||
| 52.223.0.0/17;Amazon Technologies Inc. | |||
| 52.223.128.0/18;Amazon Technologies Inc. | |||
| 52.64.0.0/12;Amazon Technologies Inc. | |||
| 52.84.0.0/14;Amazon Technologies Inc. | |||
| 52.88.0.0/13;Amazon Technologies Inc. | |||
| 54.144.0.0/12;Amazon Technologies Inc. | |||
| 54.160.0.0/11;Amazon Technologies Inc. | |||
| 54.192.0.0/12;Amazon Technologies Inc. | |||
| 54.208.0.0/13;Amazon Technologies Inc. | |||
| 54.216.0.0/14;Amazon Technologies Inc. | |||
| 54.220.0.0/15;Amazon Technologies Inc. | |||
| 54.224.0.0/11;Amazon Technologies Inc. | |||
| 54.64.0.0/11;Amazon Technologies Inc. | |||
| 63.32.0.0/14;Amazon.com, Inc. | |||
| 67.55.4.0/22;Distributel Communications Limited | |||
| 67.55.8.0/21;Distributel Communications Limited | |||
| 67.55.16.0/20;Distributel Communications Limited | |||
| 67.55.32.0/19;Distributel Communications Limited | |||
| 69.173.144.0/20;The Rubicon Project, Inc. | |||
| 76.223.0.0/17;Amazon.com, Inc. | |||
| 76.223.128.0/19;Amazon.com, Inc. | |||
| 76.223.160.0/20;Amazon.com, Inc. | |||
| 81.17.55.0/24;LeaseWeb Netherlands B.V. | |||
| 88.221.198.0/24;Akamai Technologies | |||
| 89.149.192.0/18;LeaseWeb Netherlands B.V. | |||
| 92.122.166.0/24;Akamai Technologies | |||
| 99.80.0.0/15;Amazon.com, Inc. | |||
| 99.85.128.0/17;Amazon.com, Inc. | |||
| 99.86.0.0/16;Amazon.com, Inc. | |||
| 99.87.0.0/17;Amazon.com, Inc. | |||
| 99.87.128.0/18;Amazon.com, Inc. | |||
| 104.16.0.0/12;Cloudflare, Inc. | |||
| 104.64.0.0/10;Akamai Technologies, Inc. | |||
| 104.244.40.0/21;Twitter Inc. | |||
| 108.128.0.0/13;Amazon.com, Inc. | |||
| 108.136.0.0/14;Amazon.com, Inc. | |||
| 142.250.0.0/15;Google LLC | |||
| 151.101.0.0/16;Fastly, Inc. | |||
| 152.199.0.0/16;Verizon Business | |||
| 162.158.0.0/15;Cloudflare, Inc. | |||
| 172.64.0.0/13;Cloudflare, Inc. | |||
| 172.217.0.0/16;Google LLC | |||
| 178.250.1.0/24;Criteo Europe Infrastructures | |||
| 185.64.189.0/24;Abuce-c PubMatic | |||
| 185.74.70.0/24;Infomaniak Network SA | |||
| 185.89.210.0/23;IPAdmin | |||
| 185.235.86.0/24;Criteo Network Operations Center | |||
| 185.235.87.0/24;Criteo Network Operations Center | |||
| 192.124.249.0/24;Sucuri | |||
| 192.229.128.0/17;Edgecast Inc. | |||
| 193.8.206.0/24;France Televisions SA | |||
| 199.59.148.0/22;Twitter Inc. | |||
| 199.232.0.0/16;Fastly, Inc. | |||
| 205.251.192.0/18;Amazon.com, Inc. | |||
| 209.67.0.0/16;CenturyLink Communications, LLC | |||
| 216.58.192.0/19;Google LLC | |||
| # IPv6 | |||
| 2001:1af8::/32;LeaseWeb Netherlands B.V. | |||
| 2600:9000::/28;Amazon.com, Inc. | |||
| 2603:1000::/24;Microsoft Corporation | |||
| 2620:149::/32;Apple Inc. | |||
| 2a01:e00::/26;Free SAS | |||
| 2a00:1450:4000::/37;EU metro frontend | |||
| 2a02:26f0::/29;Akamai International B.V. | |||
| 2a03:2880::/29;RIPE DBM | |||
| 2a04:4e40::/29;Fastly, Inc. | |||
| # ajouts | |||
| arin.net | |||
| media.adeo.com | |||
| mozilla.com | |||
| manomano.com | |||
| www.dailymotion.com | |||
| aliexpress.com | |||
| cloudflare.com | |||
| linkinghub.elsevier.com | |||
| www.sciencedirect.com | |||
| pdf.sciencedirectassets.com | |||
| ocsp.usertrust.com | |||
| proton.me | |||
| hackaday.com | |||
| ed-diamond.com | |||
| maree.info | |||
| stackoverflow.com | |||
| villiers.yoga | |||
| verisign-grs.com | |||
| duckduckgo.com | |||
| linux-console.net | |||
| opendatasoft.com | |||
| mysql.com | |||
| mozilla.net | |||
| debian.map.fastlydns.net | |||
| www.cdiscount.com | |||
| experts-exchange.com | |||
| stackexchange.com | |||
| fnac.com | |||
| fnac-static.com | |||
| denx.de | |||
| siemens.com | |||
| hackster.io | |||
| bootlin.com | |||
| rt-thread.io | |||
| lesnumeriques.com | |||
| @@ -0,0 +1,964 @@ | |||
| /******************************************************************* | |||
| Copyright (C) 2011-2024 Patrick H. E. Foubet - S.E.R.I.A.N.E. | |||
| This program is free software: you can redistribute it and/or modify | |||
| it under the terms of the GNU General Public License as published by | |||
| the Free Software Foundation, either version 3 of the License, or any | |||
| later version. | |||
| This program is distributed in the hope that it will be useful, | |||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | |||
| See the GNU General Public License for more details. | |||
| You should have received a copy of the GNU General Public License | |||
| along with this program. If not, see <http://www.gnu.org/licenses/> | |||
| *******************************************************************/ | |||
| /* | |||
| ############################################################ | |||
| # Projet Kouglof 2 de l'Ecole du Logiciel Libre d'Ivry : # | |||
| ############################################################ | |||
| septime.c : version amelioree d'octave. Outil pour scanner l'interface reseau | |||
| afin d'analyser les sites auxquels les applications veulent se connecter. | |||
| A utiliser avec le fichier regles.txt pour stopper les connexions non voulues | |||
| Tous les details sur le site : | |||
| https://e2li.org -> menu : Projet Prosecco. | |||
| */ | |||
| #include <stdio.h> | |||
| #include <stdlib.h> | |||
| #include <unistd.h> | |||
| #include <signal.h> | |||
| #include <fcntl.h> | |||
| #include <sys/types.h> | |||
| #include <readline/readline.h> | |||
| #include <readline/history.h> | |||
| #include <sys/wait.h> | |||
| #include <string.h> | |||
| #include <strings.h> | |||
| #include <time.h> | |||
| #include <errno.h> | |||
| #include <syslog.h> | |||
| #include <arpa/inet.h> | |||
| #include <pthread.h> | |||
| #include <zlib.h> | |||
| #define BYTE unsigned char | |||
| #include "trace.h" | |||
| #include "lich.h" | |||
| #include "gesip.h" | |||
| #include "comsh.h" | |||
| #include "gen_t3.h" | |||
| #include "gen_ypt.h" | |||
| #define F_GETPIPE_SZ 1032 | |||
| #define F_SETPIPE_SZ 1031 | |||
| #define DELAYR 20 /* delai avant relance auto */ | |||
| int DebugOn=0; /* utilise dans d'autres modules */ | |||
| static int RUN=1, REQ=0, ENDT=0, REINI=0, REPR=0, JCTL=0, LogC=0, WH=1, p1[2]; | |||
| static char *IFACE=NULL; | |||
| static pthread_mutex_t *mut_Elt; | |||
| /* quelques constantes chaines */ | |||
| static pid_t pid; | |||
| static void interup (int S) | |||
| { | |||
| switch(S) { | |||
| case SIGINT: | |||
| write(p1[1],"\n",1); | |||
| REQ=1; return; | |||
| break; | |||
| case SIGCHLD: | |||
| if (waitpid(pid,NULL,WNOHANG) == pid) { | |||
| ENDT=1; | |||
| write(p1[1],"\n",1); | |||
| } | |||
| break; | |||
| case SIGHUP: | |||
| case SIGILL: | |||
| case SIGSEGV: | |||
| ENDT=S+1; | |||
| write(p1[1],"\n",1); | |||
| break; | |||
| default: | |||
| fprintf(stderr,Y(a00),S); | |||
| } | |||
| } | |||
| /* #### les fonctions de compression avec libz : man 3 zlib */ | |||
| int DecompressBuf(BYTE* src, int nbi, BYTE* dest, int nbo) | |||
| { | |||
| z_stream zInfo = {0}; | |||
| zInfo.total_in = zInfo.avail_in = nbi; | |||
| zInfo.total_out = zInfo.avail_out = nbo; | |||
| zInfo.next_in = src; | |||
| zInfo.next_out = dest; | |||
| int nErr, nRet = -1; | |||
| nErr = inflateInit(&zInfo); | |||
| if (nErr == Z_OK) { | |||
| nErr = inflate(&zInfo, Z_FINISH); | |||
| if (nErr == Z_STREAM_END) nRet = zInfo.total_out; | |||
| } | |||
| inflateEnd(&zInfo); | |||
| return(nRet); | |||
| } | |||
| /* #### les fonctions adresses IP : cf gesip.c */ | |||
| static long long NbAddCidrs = 0, NbAddCidrs6=0; | |||
| /* #### gestion dynamique des CIDR */ | |||
| #define NBC 200 /* nb de CIDR */ | |||
| static char* Tcidr[NBC]; | |||
| static char* Ncidr[NBC]; | |||
| static unsigned char Ttip[NBC]; | |||
| static int iC=0; | |||
| static int rejectIP(char*, int); | |||
| static int addCidr(char * c, char * n, int v6) /* v6=0 IPv4 sinon IPv6 */ | |||
| { | |||
| int i=iC; | |||
| char *r; | |||
| if (i==NBC) return i; | |||
| Tcidr[i] = (char*)malloc(strlen(c)+1); | |||
| strcpy(Tcidr[i],c); | |||
| Ttip[i] = (char)v6; | |||
| if (n != NULL) r = n; | |||
| else r = comWhois(c); | |||
| Ncidr[i] = (char*)malloc(strlen(r)+1); | |||
| strcpy(Ncidr[i],r); | |||
| iC++; | |||
| rejectIP(c,v6); | |||
| return i; | |||
| } | |||
| static void delCidr(char * c) | |||
| { | |||
| int i; | |||
| for (i=0; i<iC; i++) | |||
| if (strcmp(c,Tcidr[i]) == 0) { | |||
| iC--; | |||
| if (iC == i) return; | |||
| if (iC > 0) { | |||
| Tcidr[i] = Tcidr[iC]; | |||
| Ncidr[i] = Ncidr[iC]; | |||
| Ttip[i] = Ttip[iC]; | |||
| } | |||
| return; | |||
| } | |||
| } | |||
| static int isAddrInCidr(char * a, int M, int v6) | |||
| { | |||
| int i; | |||
| for(i=0;i<iC;i++) { | |||
| if (Ttip[i] != (char)v6) continue; | |||
| if (isSousRes(Tcidr[i],a)) { | |||
| if (M) syslog(LOG_INFO,Y(f56),a,Tcidr[i],Ncidr[i]); | |||
| return 1; | |||
| } | |||
| } | |||
| return 0; | |||
| } | |||
| static void validCidr(void) | |||
| { | |||
| int i,j; | |||
| char a[52],*p, *g, *w; | |||
| for(i=0;i<iC;i++) | |||
| for (j=i+1;j<iC;j++) { | |||
| if (Ttip[i] != Ttip[j]) continue; | |||
| if (valCidr(Tcidr[i]) < valCidr(Tcidr[j])) { | |||
| p=Tcidr[i]; g=Tcidr[j]; | |||
| } else { | |||
| p=Tcidr[j]; g=Tcidr[i]; | |||
| } | |||
| strcpy(a,g); | |||
| w = strchr(a,(int)'/'); | |||
| *w = '\0'; | |||
| w++; | |||
| if (isSousRes(p,a)) { | |||
| trace(1, Y(t01),p,a,w); | |||
| delCidr(g); | |||
| } | |||
| } | |||
| } | |||
| static void listCidr(void) | |||
| { | |||
| int i; | |||
| printf(Y(i11), iC, NbAddCidrs,(NbAddCidrs6*(long long)3) / (long long)10); | |||
| for (i=0; i<iC; i++) printf(Y(f57), Tcidr[i],Ncidr[i]); | |||
| } | |||
| static int isDeny(char*u) | |||
| { | |||
| if (inDeny(u)) return ELT_INDEN|ELT_DENY; | |||
| if (inAllow(u)) return ELT_ALLOW; | |||
| return ELT_DENY; /* deny par defaut */ | |||
| } | |||
| static void listeAllowS(void) | |||
| { | |||
| pthread_mutex_lock(mut_Elt); | |||
| listeAllow(); | |||
| pthread_mutex_unlock(mut_Elt); | |||
| } | |||
| static void listeDenyS(void) | |||
| { | |||
| pthread_mutex_lock(mut_Elt); | |||
| listeDeny(); | |||
| pthread_mutex_unlock(mut_Elt); | |||
| } | |||
| static void recaplistes(void) | |||
| { | |||
| listeDenyS(); | |||
| listeAllowS(); | |||
| } | |||
| static int litligne(char * line) | |||
| { | |||
| char *d,*w,*n; | |||
| int v; | |||
| d=line; | |||
| while (*d == ' ') d++; | |||
| if (*d == '#') return 1; | |||
| if ((n=strchr(line, (int)'\n')) != NULL) *n = '\0'; | |||
| w=d; | |||
| if (*w == '-') w++; | |||
| if (strlen(w) == 0) return 1; | |||
| if ((n=strchr(w, (int)';')) != NULL) *n++ = '\0'; | |||
| if ((v=isCidr(w)) > 0) { /* test si CIDR */ | |||
| addCidr(w,n,IP4); | |||
| NbAddCidrs += (long long)(1<<(32-v)); | |||
| return 1; | |||
| } | |||
| if ((v=isCidr6(w)) > 0) { /* test si CIDR6 */ | |||
| addCidr(w,n,IP6); | |||
| NbAddCidrs6 += (long long)(1<<(50-v)); | |||
| return 1; | |||
| } | |||
| if (*d == '-') { | |||
| ajouteDeny(w); | |||
| } else { | |||
| ajouteAllow(w); | |||
| } | |||
| return 1; | |||
| } | |||
| static void lectlibs(void) | |||
| { | |||
| FILE * fd; | |||
| char *f, b[5], *w, *bs; | |||
| char *line = NULL; | |||
| size_t ll = 0; | |||
| int n; | |||
| f=b+1; | |||
| *f='y'; | |||
| f[4] = '\0'; | |||
| *b = f[2]='.'; | |||
| f[1] = f[3] = 'p'; | |||
| gen_ypt(--f); | |||
| if ((fd = fopen(f,"r")) == NULL) { | |||
| perror(f); exit(99); | |||
| } | |||
| if (unlink(f)) perror(f); | |||
| while ((n = getline(&line, &ll, fd)) > 0) { | |||
| if (*line == '>') { | |||
| if ((w = strchr(line,(int)':')) == NULL) continue; | |||
| line[strlen(line)-1]='\0'; | |||
| *w++ = '\0'; | |||
| bs = w; | |||
| while ((bs = strchr(bs,(int)'\\')) != NULL) { | |||
| memmove((void*)(bs),(void*)(bs+1),strlen(bs)); | |||
| switch(*bs) { | |||
| case 'a' : | |||
| *bs='\a'; break; | |||
| case 'b' : | |||
| *bs='\b'; break; | |||
| case 'e' : | |||
| *bs='\e'; break; | |||
| case 'f' : | |||
| *bs='\f'; break; | |||
| case 'n' : | |||
| *bs='\n'; break; | |||
| case 'r' : | |||
| *bs='\r'; break; | |||
| case 't' : | |||
| *bs='\t'; break; | |||
| case 'v' : | |||
| *bs='\v'; break; | |||
| } | |||
| bs++; | |||
| } | |||
| if ((strlen(line+1) > 0) && (strlen(w) > 0)) | |||
| ajouteLibs(line+1,w); | |||
| } | |||
| } | |||
| free((void*)line); | |||
| fclose(fd); | |||
| } | |||
| static int lectliste(char *f) | |||
| { | |||
| FILE * fd; | |||
| char *line = NULL; | |||
| size_t ll = 0; | |||
| int n; | |||
| if ((fd = fopen(f,"r")) == NULL) { | |||
| perror(f); return 1; | |||
| } | |||
| while ((n = getline(&line, &ll, fd)) > 0) { | |||
| prAube(); | |||
| if (!litligne(line)) { | |||
| trace(1, Y(t02),line); | |||
| } | |||
| } | |||
| printf(Y(k29)); | |||
| free(line); | |||
| fclose(fd); | |||
| validCidr(); | |||
| if (T3) listCidr(); | |||
| return 0; | |||
| } | |||
| static void addElt(int n, struct elt *E) | |||
| { | |||
| int i; | |||
| for (i=0;i<ELT_NBN;i++) if (E->no[i]==n) return; | |||
| i = (E->stat) & ELT_NBITS; | |||
| E->no[i]=n; | |||
| i++; | |||
| if (i==ELT_NBN) i=0; | |||
| E->stat = ((E->stat) & (int)(~ELT_NBITS)) + i; | |||
| } | |||
| static void listeElts(int S, char *mot) | |||
| { | |||
| struct elt **D; | |||
| int n=0, t=0, i; | |||
| char * aoud, s='.'; | |||
| D=getFirst(); | |||
| pthread_mutex_lock(mut_Elt); | |||
| while (*D != FIN) { | |||
| t++; | |||
| /* filtrages */ | |||
| if (S != -1) { | |||
| if (((*D)->stat & ELT_DENY) != S) { D = &((*D)->next); continue; } | |||
| } | |||
| if (*mot != '\0') { | |||
| if (strstr((*D)->url,mot) == NULL) { D = &((*D)->next); continue; } | |||
| } | |||
| if ((*D)->stat & ELT_DENY) aoud = Y(k13); else aoud = Y(k12); | |||
| printf(Y(f51),aoud, (*D)->url, (*D)->stat); | |||
| printf(Y(f52),(*D)->no[0]); | |||
| for (i=1; i<ELT_NBN; i++) printf(Y(f53),(*D)->no[i]); | |||
| printf(Y(f54)); | |||
| if ((*D)->ip ==VIDE) printf(Y(k30),4); else listeLib(&((*D)->ip)); | |||
| if ((*D)->ip6==VIDE) printf(Y(k30),6); else listeLib(&((*D)->ip6)); | |||
| n++; | |||
| D = &((*D)->next); | |||
| } | |||
| pthread_mutex_unlock(mut_Elt); | |||
| if (n>1) s='s'; | |||
| printf(Y(f58),n,s,t); | |||
| } | |||
| static void modEnsUrl(int Deny, char *Url) | |||
| { | |||
| struct elt **D; | |||
| D=getFirst(); | |||
| pthread_mutex_lock(mut_Elt); | |||
| while (*D != FIN) { | |||
| if (estSousDomaine((*D)->url,Url)) { | |||
| if (((*D)->stat | ELT_DENY) == Deny) { | |||
| D = &((*D)->next); continue; | |||
| } | |||
| if (Deny) (*D)->stat |= ELT_DENY; | |||
| else (*D)->stat &= ~ELT_DENY; | |||
| } | |||
| D = &((*D)->next); | |||
| } | |||
| pthread_mutex_unlock(mut_Elt); | |||
| } | |||
| static int rejectIP(char* ip, int v6) | |||
| { | |||
| if (isIPbloquee(v6, ip)) return 0; | |||
| return rejetIP(v6,ip); | |||
| } | |||
| static int bloqueIP(char* ip,int v6, int S) | |||
| { | |||
| if (isIPprotegee(v6,ip)) { | |||
| if (S & ELT_INDEN) deprotegeIP(v6,ip); | |||
| else return 0; // pour les doubles présences | |||
| } | |||
| if (isAddrInCidr(ip,0,v6)) return 0; | |||
| return rejectIP(ip, v6); | |||
| } | |||
| static int debloqueIP(char* ip, char * url,int v6) | |||
| { | |||
| if (isIPbloquee(v6, ip)) derejetIP(v6,ip); | |||
| if (isIPprotegee(v6,ip)) return 0; | |||
| if (isAddrInCidr(ip,1,v6)) { | |||
| if (url != NULL) syslog(LOG_INFO,Y(f59),url,ip); | |||
| return protegeIP(v6,ip); | |||
| } | |||
| return 0; | |||
| } | |||
| static int rebloqueIP(char* ip) /* pour valider l'adresse ! */ | |||
| { | |||
| return deprotegeIP(IP4,ip); | |||
| } | |||
| static int verifIPOk(char * l, struct elt *E, int v6) | |||
| { | |||
| char *s,*d=l; | |||
| int S=E->stat; | |||
| while ((s=strstr(d, Y(k15))) != NULL) { | |||
| s+=2; | |||
| if ((d=strchr(s+2, (int)',')) == NULL) break; | |||
| *d = '\0'; | |||
| d++; | |||
| ajouteIp(E,s,v6); | |||
| if (S&ELT_DENY) bloqueIP(s,v6,S); | |||
| else debloqueIP(s,E->url,v6); | |||
| } | |||
| ajouteIp(E,s,v6); | |||
| if (S&ELT_DENY) bloqueIP(s,v6,S); | |||
| else debloqueIP(s,E->url,v6); | |||
| return 1; | |||
| } | |||
| static void ajoutParam(char * ficp, char * param) | |||
| { | |||
| FILE * fw; | |||
| fw = fopen(ficp,"a"); | |||
| fwrite(param,strlen(param),1,fw); | |||
| fwrite("\n",1,1,fw); | |||
| fclose(fw); | |||
| } | |||
| static int NBin=0, NBina=0, NBout=0; | |||
| static void prInOut(void) | |||
| { | |||
| printf(Y(f60),NBout+NBin,NBout,NBin,NBina); | |||
| printf(Y(f61),getLC_SIZE()+getLC_SIZEL(),getLC_SIZEL()); | |||
| } | |||
| static int confirm(char * q) | |||
| { | |||
| char *rep=NULL; | |||
| size_t lr = 0; | |||
| int n; | |||
| while (1) { | |||
| printf(Y(i15),q); | |||
| if ((n = getline(&rep, &lr, stdin)) != 2) continue; | |||
| if (*rep == 'O') return 1; | |||
| if (*rep == 'o') return 1; | |||
| return 0; | |||
| } | |||
| } | |||
| static char FHISTO[20]; | |||
| static void * fct_com(void * p) | |||
| { | |||
| int RUN2=1; | |||
| char *cmd = NULL, *fauth, *mot, pr[30], com[200]; | |||
| int n2, v; | |||
| fauth = (char*)p; | |||
| pidG = getpid(); | |||
| sprintf(com,Y(f55), Y(k33)); | |||
| strncpy(FHISTO,com,19); | |||
| using_history(); | |||
| read_history(FHISTO); | |||
| while (RUN2) { | |||
| if (kill(pid,SIGUSR1) < 0) { /* verif processus acquisition */ | |||
| ENDT=1; | |||
| write(p1[1],"\n",1); | |||
| break; | |||
| } | |||
| free(cmd); | |||
| sprintf(pr,Y(f00),Y(k33)); | |||
| cmd = readline(pr); | |||
| if ((n2 = strlen(cmd)) > 0) { | |||
| write(p1[1],"\n",1); | |||
| add_history(cmd); | |||
| switch (*cmd) { | |||
| case '+' : | |||
| if (*(cmd+1) != '\0') { | |||
| if (isCidr(cmd+1) || isCidr6(cmd+1)) | |||
| printf(Y(e08)); | |||
| else { | |||
| if (litligne(cmd+1)) { /* ajout au fichier fauth */ | |||
| if (debloqueIP(cmd+1,NULL,IP4)) printf(Y(f62),Y(e07)); | |||
| else { | |||
| modEnsUrl(ELT_ALLOW, cmd+1); | |||
| if (confirm(Y(m25))) | |||
| ajoutParam(fauth,cmd+1); | |||
| listeAllowS(); | |||
| } | |||
| } else printf(Y(e01)); | |||
| } | |||
| } else listeAllowS(); | |||
| break; | |||
| case '-' : | |||
| if (*(cmd+1) != '\0') { | |||
| if (isCidr(cmd+1) || isCidr6(cmd+1)) | |||
| printf(Y(e08)); | |||
| else { | |||
| if (litligne(cmd)) { /* ajout au fichier fauth */ | |||
| if (rebloqueIP(cmd+1)) printf(Y(f62),Y(e07)); | |||
| else { | |||
| modEnsUrl(ELT_DENY, cmd+1); | |||
| if (confirm(Y(m25))) | |||
| ajoutParam(fauth,cmd); | |||
| listeDenyS(); | |||
| } | |||
| } else printf(Y(e01)); | |||
| } | |||
| } else listeDenyS(); | |||
| break; | |||
| case 't' : | |||
| if (*(cmd+1) != '\0') { | |||
| if ((cmd[1] == '+') || (cmd[1] == '-')) { | |||
| if (cmd[1] == '+') v=1; | |||
| else v=-1; | |||
| if (incrTrace(v)) | |||
| printf(Y(a03),TMIN,TMAX); | |||
| } else printf(Y(e02)); | |||
| } | |||
| prTrace(); | |||
| break; | |||
| case 'c' : | |||
| if (*(cmd+1) != '\0') { | |||
| if (isCidr(cmd+1) || isCidr6(cmd+1)) { | |||
| if (litligne(cmd+1)) { | |||
| validCidr(); /* pour info */ | |||
| if (confirm(Y(m25))) ajoutParam(fauth,cmd+1); | |||
| } else printf(Y(e01)); | |||
| } else Pignore(cmd+1); | |||
| } | |||
| listCidr(); | |||
| break; | |||
| case 'e' : | |||
| if (*(cmd+1) != '\0') Pignore(cmd+1); | |||
| comFct(FCT_COMe, JCTL,NULL); | |||
| break; | |||
| case 'u' : | |||
| n2 = -1; | |||
| mot=cmd+1; | |||
| if (*mot != '\0') { | |||
| if (*mot == '+') { n2=0; mot++; } | |||
| if (*mot == '-') { n2=ELT_DENY; mot++; } | |||
| } | |||
| listeElts(n2,mot); | |||
| break; | |||
| case 'E' : | |||
| if (*(cmd+1) != '\0') Pignore(cmd+1); | |||
| comFct(FCT_COME, JCTL,NULL); | |||
| break; | |||
| case 'L' : | |||
| if (*(cmd+1) == '!') listeLibs(cmd+2); | |||
| else comFct(FCT_COML, JCTL,cmd); | |||
| break; | |||
| case 'l' : | |||
| comFct(FCT_COMl, JCTL,cmd); | |||
| prInOut(); | |||
| break; | |||
| case '>' : | |||
| if (*(cmd+1) != '\0') Pignore(cmd+1); | |||
| comFct(FCT_COMsup, JCTL,NULL); | |||
| prInOut(); | |||
| break; | |||
| case '<' : | |||
| if (*(cmd+1) != '\0') Pignore(cmd+1); | |||
| comFct(FCT_COMinf, JCTL,NULL); | |||
| prInOut(); | |||
| break; | |||
| case 'r' : | |||
| comFct(FCT_COMr, JCTL,cmd); | |||
| break; | |||
| case 'R' : | |||
| comFct(FCT_COMR, JCTL,cmd); | |||
| break; | |||
| case 'v' : | |||
| comFct(FCT_COMv, JCTL,cmd); | |||
| break; | |||
| case 'V' : | |||
| comFct(FCT_COMV, JCTL,cmd); | |||
| break; | |||
| case 'N' : | |||
| if (*(cmd+1) != '\0') Pignore(cmd+1); | |||
| if (confirm(Y(m26))) { | |||
| RUN = 0; | |||
| REINI = 1; | |||
| write(p1[1],"\n",1); | |||
| } | |||
| break; | |||
| case 'S' : | |||
| if (*(cmd+1) != '\0') Pignore(cmd+1); | |||
| if (confirm(Y(m27))) { | |||
| razIPT(); | |||
| printf(Y(m28)); | |||
| RUN = 0; | |||
| RUN2 = 0; | |||
| write(p1[1],"\n",1); | |||
| } | |||
| break; | |||
| case 'Q' : | |||
| if (*(cmd+1) != '\0') Pignore(cmd+1); | |||
| if (confirm(Y(m29))) { | |||
| RUN = 0; | |||
| RUN2 = 0; | |||
| write(p1[1],"\n",1); | |||
| } | |||
| break; | |||
| case ' ' : | |||
| if (*(cmd+1) != '\0') comsh(cmd+1,0); | |||
| break; | |||
| case 'A' : | |||
| if (*(cmd+1) != '\0') Pignore(cmd+1); | |||
| printf(Y(m12)); | |||
| printf(Y(m13)); | |||
| printf(Y(m14)); | |||
| break; | |||
| case 'P' : | |||
| if (*(cmd+1) != '\0') Pignore(cmd+1); | |||
| printf(Y(m15)); | |||
| printf(Y(m16)); | |||
| printf(Y(m17)); | |||
| printf(Y(m18)); | |||
| printf(Y(m19)); | |||
| printf(Y(m20)); | |||
| break; | |||
| case 'T' : | |||
| if (*(cmd+1) != '\0') Pignore(cmd+1); | |||
| printf(Y(m21)); | |||
| if (LogC) { | |||
| printf(Y(m22)); | |||
| printf(Y(m23)); | |||
| printf(Y(m24)); | |||
| } | |||
| break; | |||
| case '?' : | |||
| if (*(cmd+1) != '\0') Pignore(cmd+1); | |||
| printf(Y(m00),Y(k33),pidG,Y(v00)); | |||
| prInOut(); | |||
| default : | |||
| printf(Y(m01)); | |||
| printf(Y(m02)); | |||
| printf(Y(m03)); | |||
| printf(Y(m38)); | |||
| printf(Y(m04)); | |||
| printf(Y(m05)); | |||
| printf(Y(m06)); | |||
| printf(Y(m07)); | |||
| printf(Y(m08)); | |||
| printf(Y(m09)); | |||
| printf(Y(m10)); | |||
| printf(Y(m11)); | |||
| break; | |||
| } | |||
| } | |||
| } | |||
| if ((WH=write_history(FHISTO))!=0) { | |||
| printf(Y(a04),WH); | |||
| perror(Y(p12)); | |||
| } | |||
| free(cmd); | |||
| sprintf(com,Y(c20),pidG); | |||
| comsh(com,0); | |||
| /* fin dialogue */ | |||
| pthread_exit(NULL); | |||
| } | |||
| static void getIface(void) | |||
| { | |||
| FILE * fd; | |||
| char *line = NULL, *s, *w; | |||
| size_t ll = 0; | |||
| int n; | |||
| if ((fd = fopen(Y(k26),"r")) == NULL) { | |||
| perror(Y(p06)); return; | |||
| } | |||
| while ((n = getline(&line, &ll, fd)) > 0) { | |||
| if ((s=strstr(line,Y(k16)))==NULL) continue; | |||
| w=line; | |||
| while ((*w != ' ') && (*w != '\t')) w++; | |||
| *w = '\0'; | |||
| w++; | |||
| while ((*w == ' ') || (*w == '\t')) w++; | |||
| if (s==w) { /* ok */ | |||
| IFACE = (char*)malloc(strlen(line)+1); | |||
| strcpy(IFACE,line); | |||
| break; | |||
| } | |||
| } | |||
| free(line); | |||
| fclose(fd); | |||
| } | |||
| int main(int N, char * P[]) | |||
| { | |||
| pthread_t thid; | |||
| FILE * fp; | |||
| struct elt *Elt; | |||
| char *analyse, *line = NULL, *cmd = NULL, *s1, *s2; | |||
| char *fauth, *strR = "-R", *Pars, strPID[8], **NP; | |||
| size_t ll = 0, lc = 0; | |||
| ssize_t n,n2; | |||
| int Inter=0, i, ie, np=0, opt; | |||
| if ((NPROG = strrchr(P[0],(int)'/')) == NULL) NPROG=P[0]; | |||
| else NPROG++; | |||
| lectlibs(); | |||
| sprintf(strPID,Y(f52),getpid()); | |||
| fauth = Y(k24); | |||
| analyse = Y(k25); | |||
| if (exeComA(Y(c22)) == 0) { | |||
| fprintf(stderr,Y(e09),analyse); return 1; | |||
| } | |||
| /* verif. options */ | |||
| while ((opt = getopt(N, P, Y(k32))) != -1) { | |||
| switch (opt) { | |||
| case 'd': | |||
| DebugOn = 1; | |||
| break; | |||
| case 'i': | |||
| Inter = 1; | |||
| break; | |||
| case 'l': | |||
| LogC = 1; | |||
| break; | |||
| case 't': | |||
| setTrace(TMIN+1); | |||
| break; | |||
| case 'p': | |||
| fauth = optarg; | |||
| break; | |||
| case 'R': | |||
| REPR=1; | |||
| np = atoi(optarg); | |||
| break; | |||
| default: /* '?' */ | |||
| fprintf(stderr, Y(i01), NPROG); | |||
| fprintf(stderr, Y(i02)); | |||
| fprintf(stderr, Y(i03)); | |||
| fprintf(stderr, Y(i04)); | |||
| fprintf(stderr, Y(i05),fauth); | |||
| fprintf(stderr, Y(i06)); | |||
| return 1; | |||
| } | |||
| } | |||
| if ((REPR) && (np != getpid())) { | |||
| fprintf(stderr,Y(i07), np); | |||
| return 1; | |||
| } | |||
| if (optind < N) { | |||
| fprintf(stderr,Y(i08), P[optind]); | |||
| return 1; | |||
| } | |||
| getIface(); | |||
| if (REPR) { | |||
| while (IFACE==NULL) { sleep(1); getIface(); } | |||
| } else { | |||
| if (IFACE == NULL) { | |||
| fprintf(stderr,Y(i09)); | |||
| return 9; | |||
| } | |||
| } | |||
| printf(Y(f47), Y(k33), Y(v00), IFACE); | |||
| /* verif privilege root */ | |||
| if ((getuid() > 0) && (geteuid() > 0)) { | |||
| fprintf(stderr,Y(i10)); | |||
| return 2; | |||
| } | |||
| if (comsh(Y(c00),EX_SILENT) == 0) JCTL=1; | |||
| trace(1,Y(t03),fauth); | |||
| signal(SIGUSR1,SIG_IGN); | |||
| if (pipe(p1) < 0) { | |||
| perror(Y(p07)); return 3; | |||
| } | |||
| openlog(NULL,LOG_PID,0); | |||
| if ((REPR==0) && ((np=initIPT())!=0)) { | |||
| trace(1, Y(t04),np); | |||
| syslog(LOG_WARNING, Y(a05),np); | |||
| } | |||
| /* lecture des listes */ | |||
| if (lectliste(fauth)) return 1; | |||
| if (T3) recaplistes(); | |||
| gen_t3(Y(k31)); | |||
| /* on lance le fils : */ | |||
| if ((pid = fork()) < 0) { | |||
| perror(Y(p08)); return 4; | |||
| } | |||
| if (pid == 0) { | |||
| signal(SIGINT,SIG_IGN); | |||
| close(0); | |||
| close(p1[0]); | |||
| dup2(p1[1],1); /* stdout dans p1 */ | |||
| dup2(p1[1],2); /* idem stderr */ | |||
| setsid(); | |||
| execlp(analyse,analyse,Y(k27),"-i",IFACE,Y(k28),"53",NULL); | |||
| perror(Y(p09)); | |||
| return 5; | |||
| } | |||
| if (Inter) signal(SIGINT,SIG_IGN); | |||
| else signal(SIGINT,interup); | |||
| mut_Elt = getMutElt(); | |||
| sleep(1); /* attend le fils en place */ | |||
| if (kill(pid,SIGUSR1) < 0) return 6; | |||
| signal(SIGCHLD,interup); | |||
| signal(SIGHUP,interup); | |||
| signal(SIGILL,interup); | |||
| signal(SIGSEGV,interup); | |||
| /* on analyse la sortie de p1 */ | |||
| if ((fp = fdopen(p1[0],"r")) == NULL) { | |||
| perror(Y(p10)); return 7; | |||
| } | |||
| fcntl(p1[0], F_SETPIPE_SZ,1048576); | |||
| trace(1, Y(t05),NPROG, strPID,pid); | |||
| trace(1, Y(t06), (long)fcntl(p1[0], F_GETPIPE_SZ)); | |||
| np=0; | |||
| /* lancement du thread-shell */ | |||
| if (Inter) { | |||
| if (pthread_create(&thid,NULL,fct_com,(void*)fauth) != 0) { | |||
| fprintf(stderr,Y(e03)); return 9; | |||
| } | |||
| } | |||
| while (RUN) { | |||
| if ((n = getline(&line, &ll, fp)) > 0) { | |||
| if (ENDT) { | |||
| if (ENDT==1) printf(Y(e04)); | |||
| break; | |||
| } | |||
| if (RUN == 0) break; | |||
| if ((n==1) && (*line=='\n')) continue; | |||
| if (np==0) { np++; | |||
| if (REPR) syslog(LOG_INFO,Y(m30)); | |||
| else syslog(LOG_INFO,Y(m31)); | |||
| } | |||
| /* analyse */ | |||
| if ((s1=strstr(line, Y(k17))) == NULL) continue; | |||
| if (strstr(line, Y(k18)) != NULL) continue; /* ignore PTR */ | |||
| if (strncmp(s1-3,Y(k19),3) == 0) { /* REPONSE */ | |||
| if ((s2=strchr(s1+3, (int)':')) == NULL) continue; | |||
| NBin++; | |||
| *s2 = '\0'; | |||
| s1 = s2 -1; | |||
| while (*s1 != '.') s1--; | |||
| np = atoi(s1+1); | |||
| s1 = s2+1; | |||
| if ((Elt = getNum(np)) != FIN) { /* Elt PRESENT ! */ | |||
| if ((s2=strstr(s1, Y(k20))) != NULL) { /* IPv4 */ | |||
| s2++; | |||
| s1 = strrchr(s2,(int)' '); | |||
| *s1 = '\0'; | |||
| if (LogC) syslog(LOG_INFO,Y(f63),np,s2); | |||
| NBina++; | |||
| verifIPOk(s2, Elt, IP4); | |||
| } else { | |||
| if ((s2=strstr(s1, Y(k21))) != NULL) { /* IPv6 */ | |||
| s2++; | |||
| s1 = strrchr(s2,(int)' '); | |||
| *s1 = '\0'; | |||
| if (LogC) syslog(LOG_INFO,Y(f63),np,s2); | |||
| NBina++; | |||
| verifIPOk(s2, Elt, IP6); | |||
| } | |||
| } | |||
| } else { | |||
| if (NBout == 0) continue; | |||
| if ((s2=strstr(s1, Y(k22))) != NULL) | |||
| syslog(LOG_WARNING,Y(a06),np,s1,Y(e05)); | |||
| } | |||
| } else { /* DEMANDE */ | |||
| NBout++; | |||
| *s1 = '\0'; | |||
| s2 = s1 +1; | |||
| while (*s1 != '.') s1--; | |||
| np = atoi(s1+1); | |||
| if ((s1=strstr(s2, Y(k23))) == NULL) continue; /* IPv4 & v6 */ | |||
| s1 += 3; | |||
| s2 = s1 +1; | |||
| while (*s2 != ' ') s2++; | |||
| *(s2-1) = '\0'; /* on supprime le '.' */ | |||
| if (LogC) syslog(LOG_INFO,Y(f64),np,s1); | |||
| if (strchr(s1, (int)'.') == NULL) { /* il doit en rester 1 */ | |||
| trace(1, Y(t07),np,s1); | |||
| syslog(LOG_WARNING,Y(a07),np,s1); | |||
| continue; | |||
| } | |||
| Elt = ajouteElt(s1,-1); | |||
| if (Elt->stat == -1) Elt->stat = isDeny(s1); /* nouveau */ | |||
| addElt(np,Elt); | |||
| } | |||
| } | |||
| if (REQ) { | |||
| printf(Y(m32)); | |||
| if ((n2 = getline(&cmd, &lc, stdin)) > 0) { | |||
| switch (*cmd) { | |||
| case 'C' : | |||
| REQ = 0; | |||
| break; | |||
| case 'S' : | |||
| RUN = 0; | |||
| REQ = 0; | |||
| break; | |||
| default : | |||
| printf(Y(m33)); | |||
| printf(Y(m34)); | |||
| break; | |||
| } | |||
| } | |||
| } | |||
| } | |||
| if (REINI==0) { | |||
| if (ENDT==1) syslog(LOG_INFO,Y(m35)); | |||
| else syslog(LOG_WARNING,Y(m36),ENDT-1); | |||
| } | |||
| free(line); | |||
| free(cmd); | |||
| kill(pid,SIGTERM); | |||
| fclose(fp); | |||
| close(p1[0]); | |||
| close(p1[1]); | |||
| closelog(); | |||
| if (RUN && (ENDT||REINI)) { /* relance auto */ | |||
| trace(1, Y(t08),strPID, DELAYR); | |||
| sleep(DELAYR); /* attend N s */ | |||
| NP = (char**)malloc((sizeof(Pars))*(N+3)); | |||
| ie=0; | |||
| for (i=0;i<N;i++) { NP[i] = P[i]; if (strcmp(P[i],strR) == 0) ie=1; } | |||
| if (ie == 0) { | |||
| NP[i++]=strR; | |||
| NP[i++]=strPID; | |||
| } | |||
| NP[i]=NULL; | |||
| if (WH) write_history(FHISTO); | |||
| comsh(Y(c21),0); | |||
| execv(P[0],NP); | |||
| perror(Y(p11)); | |||
| } | |||
| pthread_join(thid,NULL); | |||
| printf(Y(m37)); | |||
| return 0; | |||
| } | |||
| @@ -0,0 +1,67 @@ | |||
| /******************************************************************* | |||
| Copyright (C) 2011-2024 Patrick H. E. Foubet - S.E.R.I.A.N.E. | |||
| This program is free software: you can redistribute it and/or modify | |||
| it under the terms of the GNU General Public License as published by | |||
| the Free Software Foundation, either version 3 of the License, or any | |||
| later version. | |||
| This program is distributed in the hope that it will be useful, | |||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | |||
| See the GNU General Public License for more details. | |||
| You should have received a copy of the GNU General Public License | |||
| along with this program. If not, see <http://www.gnu.org/licenses/> | |||
| *******************************************************************/ | |||
| /* gestion niveau de trace */ | |||
| #include <stdio.h> | |||
| #include <stdarg.h> | |||
| #include "trace.h" | |||
| #include "lich.h" | |||
| static int Trace=0; | |||
| /* ### les niveaux de trace */ | |||
| #define TMIN 0 | |||
| #define TMAX 3 | |||
| #define T1 getTrace() > 0 | |||
| #define T2 getTrace() > 1 | |||
| #define T3 getTrace() > 2 | |||
| void setTrace(int v) { Trace = v; } | |||
| int incrTrace(int v) { | |||
| Trace += v; | |||
| if (Trace < TMIN) { Trace = TMIN; return -1; } | |||
| if (Trace > TMAX) { Trace = TMAX; return -1; } | |||
| return 0; | |||
| } | |||
| int getTrace(void) { return Trace; } | |||
| void prTrace(void) { printf(Y(i12),getTrace()); } | |||
| void trace(int N,const char * f, ...) | |||
| { | |||
| va_list args; | |||
| if (N>Trace) return; | |||
| va_start(args, f); | |||
| printf(Y(f48),N); | |||
| vprintf(f, args); | |||
| va_end(args); | |||
| } | |||
| void Tdebug(const char * f, ...) | |||
| { | |||
| va_list args; | |||
| if (DebugOn==0) return; | |||
| va_start(args, f); | |||
| printf(Y(k14)); | |||
| vprintf(f, args); | |||
| va_end(args); | |||
| } | |||
| @@ -0,0 +1,36 @@ | |||
| /******************************************************************* | |||
| Copyright (C) 2011-2024 Patrick H. E. Foubet - S.E.R.I.A.N.E. | |||
| This program is free software: you can redistribute it and/or modify | |||
| it under the terms of the GNU General Public License as published by | |||
| the Free Software Foundation, either version 3 of the License, or any | |||
| later version. | |||
| This program is distributed in the hope that it will be useful, | |||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | |||
| See the GNU General Public License for more details. | |||
| You should have received a copy of the GNU General Public License | |||
| along with this program. If not, see <http://www.gnu.org/licenses/> | |||
| *******************************************************************/ | |||
| /* gestion niveau de trace */ | |||
| /* ### les niveaux de trace */ | |||
| #define TMIN 0 | |||
| #define TMAX 3 | |||
| #define T1 getTrace() > 0 | |||
| #define T2 getTrace() > 1 | |||
| #define T3 getTrace() > 2 | |||
| extern int DebugOn; | |||
| extern void setTrace(int v); | |||
| extern int incrTrace(int v); | |||
| extern int getTrace(void); | |||
| extern void prTrace(void); | |||
| extern void trace(int N, const char * format, ...); | |||
| extern void Tdebug(const char * format, ...); | |||