Quantcast
Channel: Active questions tagged gcc - Stack Overflow
Viewing all articles
Browse latest Browse all 22113

How do I generate single header for library PCRE2?

$
0
0

How can I generate a single header for library PCRE2? I have included a Minimal, Reproducible Example that demonstrates the problem but for some reason, it will not build correctly.

I suspect the order of the sources and headers. However is there an easier way of doing this? The expected result is a successful build.

SCRIPTPATH=$PWD

CFILES="
  $SCRIPTPATH/pcre2_auto_possess.c
  $SCRIPTPATH/pcre2_chartables.c
  $SCRIPTPATH/pcre2_compile.c
  $SCRIPTPATH/pcre2_config.c
  $SCRIPTPATH/pcre2_context.c
  $SCRIPTPATH/pcre2_convert.c
  $SCRIPTPATH/pcre2_dfa_match.c
  $SCRIPTPATH/pcre2_error.c
  $SCRIPTPATH/pcre2_extuni.c
  $SCRIPTPATH/pcre2_find_bracket.c
  $SCRIPTPATH/pcre2_fuzzsupport.c
  $SCRIPTPATH/pcre2_jit_compile.c
  $SCRIPTPATH/sljit/sljitLir.c
  $SCRIPTPATH/sljit/sljitUtils.c
  $SCRIPTPATH/sljit/sljitExecAllocator.c
  $SCRIPTPATH/sljit/sljitNativeX86_common.c
  $SCRIPTPATH/sljit/sljitNativeX86_64.c
  $SCRIPTPATH/pcre2_jit_match.c
  $SCRIPTPATH/pcre2_jit_misc.c
  $SCRIPTPATH/pcre2_maketables.c
  $SCRIPTPATH/pcre2_match.c
  $SCRIPTPATH/pcre2_match_data.c
  $SCRIPTPATH/pcre2_newline.c
  $SCRIPTPATH/pcre2_ord2utf.c
  $SCRIPTPATH/pcre2_pattern_info.c
  $SCRIPTPATH/pcre2_script_run.c
  $SCRIPTPATH/pcre2_serialize.c
  $SCRIPTPATH/pcre2_string_utils.c
  $SCRIPTPATH/pcre2_study.c
  $SCRIPTPATH/pcre2_substitute.c
  $SCRIPTPATH/pcre2_substring.c
  $SCRIPTPATH/pcre2_tables.c
  $SCRIPTPATH/pcre2_ucd.c
  $SCRIPTPATH/pcre2_valid_utf.c
  $SCRIPTPATH/pcre2_xclass.c
"

CHEADERS="
  $SCRIPTPATH/config.h
  $SCRIPTPATH/pcre2.h
  $SCRIPTPATH/pcre2_internal.h
  $SCRIPTPATH/pcre2_ucp.h
  $SCRIPTPATH/pcre2_intmodedep.h
  $SCRIPTPATH/sljit/sljitLir.h
  $SCRIPTPATH/sljit/sljitConfig.h
  $SCRIPTPATH/sljit/sljitConfigInternal.h
  $SCRIPTPATH/pcre2_jit_simd_inc.h
"

for i in ${CFILES} ${CHEADERS}; do
    test -e $i && continue
    echo "FATAL: file [$i] not found."
    exit 127
done

DEFINE=(
  -D PCRE2_CODE_UNIT_WIDTH=8
  -D HAVE_STDLIB_H=1
  -D HAVE_MEMMOVE=1
  -D HEAP_LIMIT=20000000
  -D LINK_SIZE=2
  -D MATCH_LIMIT=10000000
  -D MATCH_LIMIT_DEPTH=10000000
  -D MAX_NAME_COUNT=10000
  -D MAX_NAME_SIZE=32
  -D NEWLINE_DEFAULT=2
  -D PARENS_NEST_LIMIT=250
  -D PCRE2_STATIC=1
  -D STDC_HEADERS=1
  -D SUPPORT_JIT=1
  -D SUPPORT_PCRE2_8=1
  -D SUPPORT_UNICODE=1
  -D HAVE_WINDOWS_H=1
)

OPTS=(
  -s
  -flto
  -mwindows
  -luser32
  -fmax-errors=5
  -xc -
  -o main.exe
)

function parse()
{
  RELFILE=${1#"$SCRIPTPATH/"}
  echo "/* BEGIN FILE $RELFILE */"
  sed -e '/# *include *"/d' -e '/# *include *<sljit\//d'< $1
  echo "/* END FILE $RELFILE */"
}

echo "Merging files..."
{
  for h in ${CHEADERS}; do
      parse $h
  done
  for h in ${CFILES}; do
      parse $h
  done
} > "output.h"

echo "Building..."
read -r -d '' VAR <<EOF
#include <windows.h>
#include "output.h"

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
    return 0;
}
EOF

gcc "${DEFINE[@]}""${OPTS[@]}"<<< $VAR

Viewing all articles
Browse latest Browse all 22113

Trending Articles