diff mbox series

Add pcre2 support for cmake build system.

Message ID pull.1267.git.git.1652846305514.gitgitgadget@gmail.com (mailing list archive)
State New, archived
Headers show
Series Add pcre2 support for cmake build system. | expand

Commit Message

Yuyi Wang May 18, 2022, 3:58 a.m. UTC
From: Yuyi Wang <Strawberry_Str@hotmail.com>

This commit fixes one of the TODOs listed in the CMakeLists.txt.

There's also some small fix to ensure it builds successfully.

Signed-off-by: Yuyi Wang <Strawberry_Str@hotmail.com>
---
    Add pcre2 support for cmake build system.
    
    Pcre2 is dealt with pkg-config.

Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-1267%2FBerrysoft%2Fcmake%2Fpcre2-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-1267/Berrysoft/cmake/pcre2-v1
Pull-Request: https://github.com/git/git/pull/1267

 contrib/buildsystems/CMakeLists.txt | 19 ++++++++++++++++---
 1 file changed, 16 insertions(+), 3 deletions(-)


base-commit: 277cf0bc36094f6dc4297d8c9cef79df045b735d

Comments

Junio C Hamano May 18, 2022, 10:02 p.m. UTC | #1
"Yuyi Wang via GitGitGadget" <gitgitgadget@gmail.com> writes:

> From: Yuyi Wang <Strawberry_Str@hotmail.com>
>
> This commit fixes one of the TODOs listed in the CMakeLists.txt.
>
> There's also some small fix to ensure it builds successfully.
>
> Signed-off-by: Yuyi Wang <Strawberry_Str@hotmail.com>
> ---

I haven't worked on the CMakeLists but is the above description
sufficient to tell what is going on if given to those who are
familiar with it (I ask because it is not clear at all to me).

> diff --git a/contrib/buildsystems/CMakeLists.txt b/contrib/buildsystems/CMakeLists.txt
> index 185f56f414f..99d6cb963c4 100644
> --- a/contrib/buildsystems/CMakeLists.txt
> +++ b/contrib/buildsystems/CMakeLists.txt
> @@ -54,7 +54,7 @@ set(CMAKE_SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/../..)
>  
>  option(USE_VCPKG "Whether or not to use vcpkg for obtaining dependencies.  Only applicable to Windows platforms" ON)
>  if(NOT WIN32)
> -	set(USE_VCPKG OFF CACHE BOOL FORCE)
> +	set(USE_VCPKG OFF CACHE BOOL "" FORCE)
>  endif()

Is this "small fix to ensure it builds successfully"?  To those who
do not need/want to use pcre2, is this hunk still needed to "build
successfully", or is this something that becomes necessary only
because we have other hunks in this patch to add support to pcre2?

If the former, then perhaps the change deserves to be its own patch
with own explanation why it is necessary, what breaks without it,
etc.

Thanks.
Yuyi Wang May 19, 2022, 4:18 p.m. UTC | #2
Junio C Hamano <gitster@pobox.com> wrote:

> Is this "small fix to ensure it builds successfully"?  To those who
> do not need/want to use pcre2, is this hunk still needed to "build
> successfully", or is this something that becomes necessary only
> because we have other hunks in this patch to add support to pcre2?
> 
> If the former, then perhaps the change deserves to be its own patch
> with own explanation why it is necessary, what breaks without it,
> etc.

There are 2 fixes. They are all needed no matter pcre2 is wanted. I'm
rather surprised that no one has noticed the CMakeLists.txt is broken.

> @@ -54,7 +54,7 @@ set(CMAKE_SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/../..)
>  
>  option(USE_VCPKG "Whether or not to use vcpkg for obtaining dependencies.  Only applicable to Windows platforms" ON)
>  if(NOT WIN32)
> -	set(USE_VCPKG OFF CACHE BOOL FORCE)
> +	set(USE_VCPKG OFF CACHE BOOL "" FORCE)
>  endif()
>  
>  if(NOT DEFINED CMAKE_EXPORT_COMPILE_COMMANDS)

This is the first fix. The original line didn't follow the grammar
of `set`, and would simply fail.

> @@ -277,7 +287,7 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
>  
>  elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
>  	add_compile_definitions(PROCFS_EXECUTABLE_PATH="/proc/self/exe" HAVE_DEV_TTY )
> -	list(APPEND compat_SOURCES unix-socket.c unix-stream-server.c)
> +	list(APPEND compat_SOURCES unix-socket.c unix-stream-server.c compat/linux/procinfo.c)
>  endif()
>  
>  if(CMAKE_SYSTEM_NAME STREQUAL "Windows")

This is the second fix, to solve the linkage error on Linux.

You're right, Junio. These fixes should be their own patch.
Should I remove them? They are still small fixes, I think,
and could I submit the two together in a new patch?
Derrick Stolee May 23, 2022, 6:35 p.m. UTC | #3
On 5/19/22 12:18 PM, Yuyi Wang wrote:
> Junio C Hamano <gitster@pobox.com> wrote:
> 
>> Is this "small fix to ensure it builds successfully"?  To those who
>> do not need/want to use pcre2, is this hunk still needed to "build
>> successfully", or is this something that becomes necessary only
>> because we have other hunks in this patch to add support to pcre2?
>>
>> If the former, then perhaps the change deserves to be its own patch
>> with own explanation why it is necessary, what breaks without it,
>> etc.
> 
> There are 2 fixes. They are all needed no matter pcre2 is wanted. I'm
> rather surprised that no one has noticed the CMakeLists.txt is broken.
> 
>> @@ -54,7 +54,7 @@ set(CMAKE_SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/../..)
>>  
>>  option(USE_VCPKG "Whether or not to use vcpkg for obtaining dependencies.  Only applicable to Windows platforms" ON)
>>  if(NOT WIN32)
>> -	set(USE_VCPKG OFF CACHE BOOL FORCE)
>> +	set(USE_VCPKG OFF CACHE BOOL "" FORCE)
>>  endif()
>>  
>>  if(NOT DEFINED CMAKE_EXPORT_COMPILE_COMMANDS)
> 
> This is the first fix. The original line didn't follow the grammar
> of `set`, and would simply fail.
> 
>> @@ -277,7 +287,7 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
>>  
>>  elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
>>  	add_compile_definitions(PROCFS_EXECUTABLE_PATH="/proc/self/exe" HAVE_DEV_TTY )
>> -	list(APPEND compat_SOURCES unix-socket.c unix-stream-server.c)
>> +	list(APPEND compat_SOURCES unix-socket.c unix-stream-server.c compat/linux/procinfo.c)
>>  endif()
>>  
>>  if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
> 
> This is the second fix, to solve the linkage error on Linux.
> 
> You're right, Junio. These fixes should be their own patch.
> Should I remove them? They are still small fixes, I think,
> and could I submit the two together in a new patch?

You can rewrite your branch history to have two commits, force
push your branch, and the GGG pull request will then have two
commits. This will translate to two patches (along with a
cover letter) when you "/submit" again.

Here are some links that might help you in this process:

[1] https://www.youtube.com/watch?v=4qLtKx9S9a8
[2] https://render.com/blog/git-organized-a-better-git-flow

Thanks,
-Stolee
Derrick Stolee May 23, 2022, 6:36 p.m. UTC | #4
On 5/18/22 6:02 PM, Junio C Hamano wrote:
> "Yuyi Wang via GitGitGadget" <gitgitgadget@gmail.com> writes:
> 
>> From: Yuyi Wang <Strawberry_Str@hotmail.com>
>>
>> This commit fixes one of the TODOs listed in the CMakeLists.txt.
>>
>> There's also some small fix to ensure it builds successfully.
>>
>> Signed-off-by: Yuyi Wang <Strawberry_Str@hotmail.com>
>> ---
> 
> I haven't worked on the CMakeLists but is the above description
> sufficient to tell what is going on if given to those who are
> familiar with it (I ask because it is not clear at all to me).

I had the same confusion. Perhaps the message could indicate
how one could test this PCRE2 compilation so we could try it
out ourselves?

Thanks,
-Stolee
diff mbox series

Patch

diff --git a/contrib/buildsystems/CMakeLists.txt b/contrib/buildsystems/CMakeLists.txt
index 185f56f414f..99d6cb963c4 100644
--- a/contrib/buildsystems/CMakeLists.txt
+++ b/contrib/buildsystems/CMakeLists.txt
@@ -54,7 +54,7 @@  set(CMAKE_SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/../..)
 
 option(USE_VCPKG "Whether or not to use vcpkg for obtaining dependencies.  Only applicable to Windows platforms" ON)
 if(NOT WIN32)
-	set(USE_VCPKG OFF CACHE BOOL FORCE)
+	set(USE_VCPKG OFF CACHE BOOL "" FORCE)
 endif()
 
 if(NOT DEFINED CMAKE_EXPORT_COMPILE_COMMANDS)
@@ -108,7 +108,6 @@  project(git
 
 #TODO gitk git-gui gitweb
 #TODO Enable NLS on windows natively
-#TODO Add pcre support
 
 #macros for parsing the Makefile for sources and scripts
 macro(parse_makefile_for_sources list_var regex)
@@ -160,6 +159,14 @@  if(NOT (WIN32 AND (CMAKE_C_COMPILER_ID STREQUAL "MSVC" OR CMAKE_C_COMPILER_ID ST
 	find_package(Intl)
 endif()
 
+find_package(PkgConfig)
+if(PkgConfig_FOUND)
+	pkg_check_modules(PCRE2 libpcre2-8)
+	if(PCRE2_FOUND)
+		add_compile_definitions(USE_LIBPCRE2)
+	endif()
+endif()
+
 if(NOT Intl_FOUND)
 	add_compile_definitions(NO_GETTEXT)
 	if(NOT Iconv_FOUND)
@@ -180,6 +187,9 @@  endif()
 if(Intl_FOUND)
 	include_directories(SYSTEM ${Intl_INCLUDE_DIRS})
 endif()
+if(PCRE2_FOUND)
+	include_directories(SYSTEM ${PCRE2_INCLUDE_DIRS})
+endif()
 
 
 if(WIN32 AND NOT MSVC)#not required for visual studio builds
@@ -277,7 +287,7 @@  if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
 
 elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
 	add_compile_definitions(PROCFS_EXECUTABLE_PATH="/proc/self/exe" HAVE_DEV_TTY )
-	list(APPEND compat_SOURCES unix-socket.c unix-stream-server.c)
+	list(APPEND compat_SOURCES unix-socket.c unix-stream-server.c compat/linux/procinfo.c)
 endif()
 
 if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
@@ -700,6 +710,9 @@  endif()
 if(Iconv_FOUND)
 	target_link_libraries(common-main ${Iconv_LIBRARIES})
 endif()
+if(PCRE2_FOUND)
+	target_link_libraries(common-main ${PCRE2_LIBRARIES})
+endif()
 if(WIN32)
 	target_link_libraries(common-main ws2_32 ntdll ${CMAKE_BINARY_DIR}/git.res)
 	add_dependencies(common-main git-rc)